是通过复制目录安装JRE影响的类数据共享(CD)



当通过Oracle JRE安装程序安装JRE时,安装程序会创建一个共享的存档,该存档可以启用类数据共享(CDS),减少JRE Process的启动时间和内存足迹。

问题

如果我们的安装程序通过复制JRE目录来安装JRE,我们是否会丢失类数据共享?

如果是这样,可以通过从我们自己的安装程序中再生共享存档(使用java -Xshare:dump)来解决吗?

Java代码中是否有一个机制来检测类数据共享是否处于活动状态?

我们的安装包括共享存档(例如JRE/bin/client/class.jsa),该档案可能是在我们使用Oracle Installer安装的原始计算机上创建的。这是有用的,无害的还是有害的?

详细信息

我们使用的是Java 7.至少在某些机器上,我们正在使用Hotspot客户端VM。

相关问题

" Java代码是否保存在本机本地编译的类数据共享存档(类)中? - 接受的答案说本机,但似乎有些猜测。

通过复制JRE目录,我们是否会丢失类数据共享?

类数据共享文件仅在JVM版本和引导类Path的情况下才有效。从JDK-8046070 JVM开始,从8U40开始,即使JRE目录被重命名或移动,也将拒绝加载CDS档案。

Java 7仍然允许在复制JRE目录时重复使用CDS档案,但这不是可靠的功能,我不建议这样做。

可以通过再生共享存档(使用Java -XShare:dump)来解决该解决的问题

是的,这是正确的方法。这将确保生成的CDS档案的完整性并节省安装软件包的大小。

Java代码中是否有一个机制来检测类数据共享是否处于活动状态?

是的,通过使用JMX读取UseSharedSpaces标志:

    HotSpotDiagnosticMXBean bean = ManagementFactory.newPlatformMXBeanProxy(
            ManagementFactory.getPlatformMBeanServer(),
            "com.sun.management:type=HotSpotDiagnostic",
            HotSpotDiagnosticMXBean.class);
    System.out.println(bean.getVMOption("UseSharedSpaces"));

您也可以通过-XX:+RequireSharedSpaces JVM标志强制CD要求。

" Java代码是否保存在本机内编译的类数据共享存档(class.jsa)中?"

取决于"本地编译"的含义。类元数据以特定于混凝土平台的本机格式保存。但是没有编译字节码。没有提前编译,Java字节码保存在CDS档案中。

最新更新