2017-08-08 48 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