我有用java 1.6編譯的項目,但它在1.7 jvm的機器上運行,我想知道如果項目也會有性能改進用java 1.7編譯。在Java 1.6中編譯的應用程序的性能和1.7下運行jvm
回答
(注:我在這裏講了Oracle JDK和JVM)的
如果你的意思是隻需重新編譯源文件,而無需在Java 7中採取的任何新功能,我懷疑你會看到任何重大的性能變化。
性能優化完成:
- 由編譯器優化字節碼,並
- 由JVM,優化,因爲它運行,特別優化的「熱點」(JVM的故名,因爲它檢測到它們
因此,如果您不使用新的Java 7功能,那麼您將看到的唯一改進是如果Java 7編譯器執行了一些重要的新字節碼級優化, Java 6編譯器沒有這樣做。我沒有看到在release notes中列出的任何東西,甚至在Java 6中,編譯器也進行了很好的優化(坦率地說,我認爲絕大多數優化都發生在JVM上; JVM 7中的性能提高了,已經得到了好處)。
JVM不必對類文件格式的變化做任何重要的工作。根據Java SE 7 and JDK 7 Compatibility page,唯一的二進制兼容性更改是由於引入了新的字節碼而導致次版本號更改。但是,該字節碼(invokedynamic
)支持不在Java 6源代碼中的功能,因此無法在此處看到。結構沒有改變,只是次要版本號。
一個快速的方法是,您應該按照http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html檢查您的項目是否使用JDK 1.7中的這些性能增強功能,對不對?
這個如果項目必須用java編譯,則不會回答問題1.7 – tak3shi
不需要使用JDK1.7進行編譯,因爲焦點應該是運行時環境本身。 –
- 1. 在1.6 JVM上運行的Jetty無法運行在Java 1.6上編譯的webapp
- 2. 我的源代碼如何在java 1.7下編譯爲1.6
- 3. 如何使用舊版本的Java 1.6運行.jar 1.7程序?
- 4. 編譯並運行Java應用程序中的C++程序
- 5. 問題編譯和運行與Bluecove(NoClassDefFoundError的)Java應用程序
- 6. 在java 7環境下運行java 1.5編譯的程序
- 7. 如何編譯和運行Java程序?
- 8. 如何運行和編譯java程序?
- 9. 不受支持major.minor版本.51和在Java 1.6上運行java 1.7代碼1.6
- 10. 在Cloudbees中的JVM運行時容器中運行標準Java應用程序
- 11. 運行在EC2上的Java應用程序的JVM指標
- 12. 爲Maven和Netbeans 1.6編譯java源代碼1.7
- 13. 如何在Eclipse的Maven項目中編譯和運行Java應用程序?
- 14. JVM在iOS應用程序中運行Android應用程序?
- 15. 從Java運行cygwin編譯的程序
- 16. 編譯但不運行的Java程序
- 17. 在沒有JVM的機器上運行Java應用程序
- 18. 不能運行編譯的程序
- 19. 在Eclipse中編譯和運行OSGI應用程序
- 20. 應用程序無法在Android Studio中編譯和運行
- 21. 編譯並運行來自Java應用程序的源代碼
- 22. 託管在Sun編譯的Web應用程序JDK 1.6
- 23. 編譯jvm上的scala程序
- 24. 使用JDK 1.6和JDK 1.7不同的日食程序
- 25. 如何在php中編譯和運行java程序?
- 26. 用Vim編譯和運行C++程序
- 27. 在Web應用程序中運行的編譯目標C
- 28. 使用ant和Java 1.7編譯問題
- 29. 爲什麼這個代碼在Java 1.6中編譯而不是在Java 1.7中編譯?
- 30. 在linux中編譯的windows中運行java程序
你可以參考這個博客瞭解1.6和1.7之間的性能:http://lingpipe-blog.com/2009/03/30/jdk-7-twice-as-fast-as-jdk- 6-for-arrays-and-arithmetic/ 而這個:http://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/ –