我正在用Java構建遊戲服務器。網絡將由JBoss Netty處理,如果我使用JNI調用C++函數(這些函數只是彙編代碼的封裝程序(與NASM彙編)以便完成I/O操作),我認爲可以獲得一些額外的性能和內存效率在彙編中,以及處理大量的數據。這種方法有什麼收穫嗎?我將通過JNI獲益於內存和速度嗎?
2
A
回答
5
I/O功能受到操作系統的瓶頸,並且組裝將會加速I/O,而不是而不是。一般來說,切換到C++或切換到任何低級語言都沒有。
如果要提高性能,請嘗試避免 I/O。
2
這是每個案例的基礎。如果在I/O之間,它涉及大量的計算/進程/內存訪問,Java的執行效率低於C++,那麼您肯定會獲得性能提升。在很多情況下,這是事實。
但仔細想想,性能增益是否超過了您調試某個進程的能力。如果問題出現在你的JNI調用中,將很難找出問題所在。
通常對於服務器來說,更重要的是能夠分辨問題並修復問題,而不是在推動性能方面走極端道路,因爲通過附加硬件(更快的組件,集羣,等等)不像客戶端程序,你經常被一個默認硬件困住。
相關問題
- 1. Cython沒有速度收益嗎?
- 2. 我可以通過網頁檢測cpu類型和速度,和/或計算機的內存量(javascript希望)嗎?
- 3. 通過JNI訪問C中的高速緩存
- 4. 如何從dmidecode獲得內存速度?
- 5. 通過內存+ eval提高速度或使用常規文件
- 6. 通過增加內存限制來提高網站速度?
- 7. resharper 5 - 速度和內存膨脹問題解決了嗎?
- 8. 內存泄漏通過儀器迅速
- 9. 通過JNI
- 10. 分析速度和內存堆積
- 11. glGenTextures速度和內存問題
- 12. Java速度和內存佔用「比賽」
- 13. 重力與通話時間,加速度和速度獲得
- 14. 提高程序速度:矢量速度,內存塊速度
- 15. 如何通過Webhook獲得收益
- 16. 通過緩存提高winform應用程序和WCF的速度
- 17. 通過移動平臺獲取位置和速度
- 18. CUDA共享內存速度
- 19. 我可以通過JNI調試通過本機代碼創建的JVM嗎?
- 20. 通過jni在java中存儲pthread_t
- 21. std :: strings隊列需要通過JNI的共享內存?
- 22. 通過使用通用映像,我可以通過docker節省內存嗎?
- 23. JNI釋放內存
- 24. JNI內存泄漏
- 25. 通過JNI獲取Java ByteBuffer的指針
- 26. 的NullPointerException通過JNI
- 27. 哪個速度通常更快,收益率還是附加值?
- 28. 通過GPS獲取緯度和經度
- 29. Android - JNI - 通過JNI恢復MyException成員
- 30. 獲取地點名稱通過將經度和緯度的Android
好的,謝謝:)。但是JNI調用的本地代碼通常會更快嗎? – Benjamin 2011-04-20 09:26:45
是的,很少___位。這不是因爲I/O速度更快,而是因爲變量的一般解析以及類似的東西不是通過虛擬機,而是直接通過機器代碼。雖然差異很小。 – orlp 2011-04-20 09:28:15
如果有的話。不要太早進行優化,也不要低估JIT編譯器的可能性。 JIT編譯器使用哪些C++編譯器無法使用的優化可能性。因此,調用本地代碼是否真的會讓你受益匪淺。特別是如果你必須經常跨越Java代碼和本地代碼之間的邊界。 – jmg 2011-04-20 09:43:23