在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. C++ InMemory高速緩存庫
- 4. Symfony2高速緩存問題
- 5. C#中的高速緩存模擬#
- 6. 禁用高速緩存中的緩存
- 7. 高速緩存未命中時的平均訪問時間
- 8. 用於堆內存訪問的高速緩存
- 9. C++中的高速緩衝
- 10. C#共享內存高速緩存
- 11. 使用spring高速緩存的屬性高速緩存
- 12. LINQ到SQL高速緩存的問題
- 13. MySQL高速緩存
- 14. 如何通過Java收集AMD CPU高速緩存命中率?
- 15. 點燃高速緩存重新連接問題(高速緩存已停止)
- 16. 通過JNI從java訪問wiringPi(GPIO)
- 17. 元高速緩存或Codeigniter高速緩存
- 18. 從高速緩存下載圖像Android與高速緩存
- 19. 高速緩存超過1MB memcache替代
- 20. C高速緩存動態編程
- 21. 通過緩存提高winform應用程序和WCF的速度
- 22. Oracle mapviewer - 高速緩存問題
- 23. 高速緩存問題與重定向
- 24. 高速緩存和線程問題
- 25. HTML5高速緩存和授權問題
- 26. NSURLCache高速緩存響應問題
- 27. 笨高速緩存控制器問題
- 28. 高速緩存的模式
- 29. 複製高速緩存中的數據大於一個高速緩存行
- 30. 本地主機 - 仿真器 - 高速緩存訪問被拒絕
這完全取決於你正在緩存什麼。實施,配置文件,觀察。 – 2011-04-04 23:55:03