2017-08-08 55 views
11

我一直在尋找我的JDK安裝,我看見兩個裝置之間的差異:Java的熱點(TM)客戶端共享VS不共享

java version "1.8.0_121" 
Java(TM) SE Runtime Environment (build 1.8.0_121-b13) 
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode) 

VS

java version "1.8.0_121" 
Java(TM) SE Runtime Environment (build 1.8.0_121-b13) 
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode, sharing) 

,我想知道是什麼的sharingnot sharing狀態之間的區別是。

除了「速度差異」,我找不到一個好的答案,但沒有解釋爲什麼/這是關於什麼。

+2

[班級數據共享](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html)? – dejvuth

回答

1

這就是所謂的Class Data Sharing,如here所述; 這僅適用Client VM

基本上它是一種加快VM啓動時間的方法 - 解析的類存儲在一個文件中,當VM啓動時,它只是讀取該文件(已經編譯過的類),它也可以與其他正在運行的虛擬機共享。

shared版本將包含文件jre\bin\client\classes.jsa,另一個不會。

由於java-8可以將自己的類添加到該文件中 - 如果我沒有記錯,並且本地代碼(而不是字節碼)將用於抓取。

我沒有使用客戶端虛擬機具備了這種支持 - 只要讀到它。

+0

我認爲,這種信息,即它僅適用於客戶端的JVM,是完全過時。請注意,即使這個頁面本身說:「在Microsoft Windows平臺上[它位於] jre/bin/[client或server]/classes.jsa'」中。如果我嘗試使用'-Xshare:上-server'(記住'-Xshare:on' *需要* CDA,如果不支持會失敗),我沒有得到任何錯誤。那麼,有沒有必要用'-server',實際上,因爲有64位架構... – Holger

+0

@Holger確實沒有客戶端JVM ... – Eugene