And*_*mas 5 java installer jvm
通过Oracle JRE安装程序安装JRE时,安装程序会创建一个共享存档,以启用类数据共享(CDS),从而减少JRE进程的启动时间和内存占用.
如果我们的安装程序通过复制JRE目录来安装JRE,那么我们是否会丢失类数据共享?
如果是这样,可以通过java -Xshare:dump从我们自己的安装程序重新生成共享存档(使用)来解决吗?
Java代码中是否有一种机制来检测类数据共享是否处于活动状态?
我们的安装包括一个共享存档(例如,jre/bin/client/classes.jsa),它可能是在我们使用Oracle安装程序安装Java的原始机器上创建的.这有用,无害还是有害?
我们正在使用Java 7.至少在某些机器上,我们使用的是HotSpot客户端VM.
"Java代码是保存在本地编译的类数据共享存档(classes.jsa)中还是字节码?" - 接受的答案说原生,但似乎有点猜测.
通过复制 JRE 目录,我们会丢失类数据共享吗?
仅当 JVM 版本和启动类路径保持不变时,类数据共享文件才有效。从 8u40 开始,由于JDK-8046070,即使 JRE 目录被重命名或移动,JVM 将拒绝加载 CDS 存档。
Java 7 仍然允许在复制 JRE 目录时重用 CDS 存档,但这不是一个可靠的功能,我不建议这样做。
可以通过重新生成共享存档来解决吗(使用 java -Xshare:dump)
是的,这是一条正确的路。这将保证生成的CDS存档的完整性,并节省安装包的大小。
Java代码中是否有一种机制来检测类数据共享是否处于活动状态?
是的,通过UseSharedSpaces使用 JMX 读取标志:
HotSpotDiagnosticMXBean bean = ManagementFactory.newPlatformMXBeanProxy(
ManagementFactory.getPlatformMBeanServer(),
"com.sun.management:type=HotSpotDiagnostic",
HotSpotDiagnosticMXBean.class);
System.out.println(bean.getVMOption("UseSharedSpaces"));
Run Code Online (Sandbox Code Playgroud)
您还可以通过-XX:+RequireSharedSpacesJVM 标志强制要求 CDS。
“保存在类数据共享存档 (classes.jsa) 中的 Java 代码是本机编译的还是字节码?”
取决于你所说的“本地编译”是什么意思。类元数据以特定于具体平台的本机格式保存。但没有编译任何字节码。没有提前编译,Java 字节码按原样保存在 CDS 存档中。
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |