我有一個1.5兼容的Java源代碼,它將完全在1.8 VM上運行,並且想知道在編譯期間是否有利於1.8版本而不是舊版本。針對不同Java版本的源代碼之間的性能差異?
1.5和1.8之間會有任何性能差異嗎? 是否有任何相關的文檔或更改日誌可用,我可以看看?
我有一個1.5兼容的Java源代碼,它將完全在1.8 VM上運行,並且想知道在編譯期間是否有利於1.8版本而不是舊版本。針對不同Java版本的源代碼之間的性能差異?
1.5和1.8之間會有任何性能差異嗎? 是否有任何相關的文檔或更改日誌可用,我可以看看?
javac
幾乎沒有優化。它所做的主要優化是不斷內聯,並一直這樣做。
區別完全在於JVM。在Java 8中,您可以有更多的選項來編寫相同的代碼,這意味着您可以重新編寫代碼以提高效率。
除了性能,你應該考慮其中已得到修復,因爲1.5
也有1.8的新API,如JavaFX的,NIO,lambas千元bug修復。
Oracle宣佈swing不會再更新,所以如果你的應用程序有GUI,你應該考慮開始尋找移植到javafx。
在甲骨文網站順便說一句,當你下載一個新的JDK也有一個鏈接的更新日誌
有關錯誤修復的好處,但我更關心爲不同目標生成的字節碼之間的性能差異。 該應用程序沒有GUI。 – orom
Thre是從Java 1.6開始的更高效的新垃圾收集器。熱點也被重寫爲x64。其他信息是我猜想更多的甲骨文的內部祕密,你只能通過自己做一些測試來比較 –
既然你指的是Java字節代碼,運行舊的應用程序有一個新的JVM版本編譯的Java代碼(1.8)應該可以提高應用程序的性能,而不需要重新編譯字節碼。
您可以查看關於JDK 8 performance improvement的Oracle官方文檔,以瞭解發生了什麼變化。
我通常將編譯設置爲1.7。 Java 8的其他特性中的新lambda語法非常好,但是我遇到了java 7的兼容性問題,而這正是我習慣的。
如果您使用虛擬機自己工作,並且您知道您不需要依賴於最終會出現問題的框架,那麼請儘量使用java 8. 您也可以查看官方文檔,但維基百科實際上提供了一個很好的更改日誌imo: https://en.wikipedia.org/wiki/Java_version_history
我發現this Oracle source討論了Java 7與早期版本的兼容性。它僅提到invokedynamic
字節碼作爲版本7和6之間的(字節碼)差異。由於字節碼並沒有真正改變太多,所以版本5字節碼與版本8字節碼對性能的影響可以忽略不計。
您是問在Java 8 JVM上Java 8類文件是否比Java 5類文件更快,或者Java 8 JVM上的Java 8類文件是否比Java 5 JVM上的Java 5類文件更快? – meriton
@meriton第一個 – orom