2013-02-22 48 views
7

我想知道創建Class Data Sharing存檔(通過運行java -Xshare:dump)是否將字節碼編譯爲本機代碼。Java代碼是否保存在本機編譯的類數據共享存檔(classes.jsa)中,或者是字節碼?

關於Class Data Sharing的內部內容並沒有太多的文檔。我鏈接的頁面說java -Xshare:dump

從系統jar文件加載一組類到一個私人的內部表示,並將該表示轉儲到一個文件。

但是不說這個代碼是否被編譯。

(可能涉及:Speed up application start by adding own application classes to classes.jsa

+0

它看起來像IBM JVM for Java 6可以做到這一點:http://www.ibm.com/developerworks/library/j-sharedclasses/ – 2013-02-22 12:49:12

回答

2

在這兩種情況下,它是在緩存本地代碼(見您提供關於再生在不同架構的機器高速緩存鏈接的討論)。 IBM JVM進一步爲集羣提供了更多的選擇和更好的佈局,但是Oracle的工作也是如此。

+0

究竟是什麼讓你說它是本機代碼? 「不同的體系結構」問題僅僅意味着類歸檔文件的佈局取決於操作系統(ptrs的大小等),並不意味着代碼是原生編譯的。 – 2013-02-22 14:35:16

+0

因爲沒有中間步驟。它的源代碼 - >字節碼 - >本地。只有在本地步驟中,您纔會關心諸如endienness,字號等內容。文檔中還提到緩存類可能不像JIT編譯類那樣具有性能。這意味着緩存類可以按原樣執行,因爲JIT利用了任何特定硬件上可用的所有快捷方式,這些硬件在兼容體系結構中以及該JVM中的特定執行模式中可能會有很大差異。所以來自緩存的類不會被進一步編譯。 – WPrecht 2013-02-22 14:47:59

相關問題