2014-02-14 26 views
4

如果我用我的java7 jdk進行編譯,我會得到一個jar,它可以很好地運行java7,但顯然無法加載java6。如果我使用java7 jdk進行編譯,但指定的輸出與java6兼容,則它在java6 jre和java7 jre上運行良好。編譯java6而不是java7的缺點是什麼?

我的問題是,是第一個jar以某種方式比在第二個java7 jre中更好地運行(更快,更高效,更優化)? java7 jre的用戶有沒有使用第二個的缺點,或者這個第二個jar是否足夠每個人都可以使用?

我的推理是,我希望java7用戶的結果儘可能好,但我需要能夠在java6上運行的東西。那麼我需要提供兩個罐子還是隻有java6嗎?

+0

除非您想使用Java 7中引入的新功能,否則我不會看到任何理由擔心並且代碼運行得很好。 – Omoro

+0

不,沒有新功能(我希望在這種情況下我會看到編譯問題)。是的,它在java6上運行良好。我只是不希望java7用戶有任何缺點。 – francis

+0

不要擔心會工作。我在Java 7上編譯了運行在Java 7上的代碼。 – Omoro

回答

2

顯然,如果你編譯和運行Java 6的代碼中,您不能使用已添加到Java 7的Java的標準庫類,因爲這些將不存在於Java 6

至於其他,根本沒有實際的區別。幾乎所有的優化都是在運行時由JVM和JIT完成的; Java編譯器幾乎不做優化。

+0

但我注意到jar文件的大小不同,儘管代碼和設置完全相同,所以我猜測它代表不同的代碼,可能會利用特殊的java7功能? – francis

+0

我的記憶在癢癢;我相信我記得閱讀一篇關於在Java 7中通過修復一個愚蠢的bug在jar工具中完成的重大優化的文章... – Gimby

+0

如果你想知道實際的字節碼是否不同,你可以用' javap'工具並進行比較。 – Jesper

0

如果你不使用Java 7中的任何新API,我認爲沒有什麼不同。我不是100%確定的,我認爲如果你的程序使用Java 6編譯,它會仍然受益於運行在Java 7 VM上的人們的速度提升。

相關問題