在C/C++中構建LRU類型高速緩存並讓Java通過JNI訪問它會對性能有所幫助嗎?通過JNI訪問C中的高速緩存
回答
可疑
的JVM做了很多體面的工作,這些天,特別是考慮到需要緩存的應用程序可能會熬夜足夠長的JVM優化它頗有幾分。無論您的緩存代碼如何通過避免使用JVM來獲得速度,您可能會失去在JNI中來回推送對象。
更不用說與Java相比C++代碼的固有開發,維護和部署困難。或者通過推出自己的緩存重新發明輪子的危險 - 必須有可以使用的東西,而不是推出自己的緩存。
雖然每個人的回答都是我正在尋找的,但是您的選票卻是最高的。所以我會給你答案:)並且也贊成每個人。感謝大家。 – 2011-04-09 22:41:02
JIT編譯器非常快速。它與編譯的代碼相媲美。
最好的辦法是在任何最容易開發的地方實現它,然後對其進行配置以識別性能問題。然後,看看你可以從那裏做些什麼。
不太可能。
緩存與堆中的對象一起工作。 C++中的堆內存分配和釋放並不比Java更好。事實上,在短期運行的測試中,由於推遲的GC,Java緩存甚至可能會獲勝(C++必須立即明確釋放內存)。由於JIT,這些操作(put,find)預計會與C++保持一致(這些都是熱點,並且很快會被編譯成本機代碼)。
注意:一如既往的性能,最終的答案只能通過測試獲得。
即使在長時間運行的測試中,現在Java的內存管理通常會由於後者中的碎片而執行C. – 2011-04-05 03:20:38
你幾乎肯定沒有在這裏優化正確的東西。高速緩存實施很少什麼需要在大型系統中優化。 Java有很多好的和快速的實現。你不可能從本地實現中獲得更多的好處。即使你可以,你確定你真的需要嗎?
這通常是你在緩存中做的所有事情,實際上是重要。數據庫查詢,阻止操作和CPU密集型任務。您當然應該分析您的應用程序,並只優化需要它的區域。如果你正在優化一些只佔整體時間5%的東西,那麼你只能在最好的情況下獲得5%的提升(即,如果你的速度無限快)。
我已經處理了帶有大型緩存的大型系統,而且緩存實現的開銷非常低,最多隻有一位數的百分比。你應該確保你花時間在正確的事情上。我並不是說你可能不需要,我只是說這是可疑的,你應該先驗證。你沒有指出某種方式,所以我假設你有一個已知的緩存實現問題。
- 1. 多級高速緩存訪問時間
- 2. C#高速緩存未顯示存儲在高速緩存中的原始值
- 3. Symfony2高速緩存問題
- 4. 禁用高速緩存中的緩存
- 5. 用於堆內存訪問的高速緩存
- 6. C++中的高速緩衝
- 7. C#共享內存高速緩存
- 8. LINQ到SQL高速緩存的問題
- 9. MySQL高速緩存
- 10. 點燃高速緩存重新連接問題(高速緩存已停止)
- 11. 笨高速緩存控制器問題
- 12. Oracle mapviewer - 高速緩存問題
- 13. 高速緩存和線程問題
- 14. NSURLCache高速緩存響應問題
- 15. 使用Azure高速緩存訪問被拒絕錯誤
- 16. 正在通過C#訪問CPU緩存(讀寫)嗎?
- 17. 高速緩存持久性
- 18. FragmentStatePagerAdapter高速緩存使用
- 19. UIImage initWithContentsOfFile:和高速緩存
- 20. 數組和高速緩存
- 21. Capifony高速緩存錯誤
- 22. IGNITE高速緩存錯誤
- 23. Python整數高速緩存
- 24. 防止IE高速緩存
- 25. 清除Webpack高速緩存
- 26. ASP.NET高速緩存唯一
- 27. 清除Java高速緩存
- 28. Sweave高速緩存包
- 29. MySQL表高速緩存的命中率
- 30. 清除高速緩存中的RSL
這完全取決於你正在緩存什麼。實施,配置文件,觀察。 – 2011-04-04 23:55:03