gpt4 book ai didi

java - 通过复制目录安装 JRE 是否会影响类数据共享 (CDS)?

转载 作者:搜寻专家 更新时间:2023-10-31 20:19:09 26 4
gpt4 key购买 nike

当通过 Oracle JRE 安装程序安装 JRE 时,安装程​​序会创建一个共享存档,启用 class data sharing (CDS) ,减少 JRE 进程的启动时间和内存占用。

问题

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

如果是这样,是否可以通过我们自己的安装程序重新生成共享存档(使用 java -Xshare:dump)来解决这个问题?

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

我们的安装包括一个共享存档(例如,jre/bin/client/classes.jsa),它可能是在我们使用 Oracle 安装程序安装 Java 的原始机器上创建的。这是有用的、无害的还是有害的?

详情

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

相关问题

"Is the Java code saved in a Class Data Sharing archive (classes.jsa) compiled natively or is it bytecode?" - 接受的答案是本地人,但似乎有点猜测。

最佳答案

by copying a JRE directory, do we lose class data sharing?

类数据共享文件只有在 JVM 版本和引导类路径保持不变的情况下才有效。由于 JDK-8046070,从 8u40 开始即使重命名或移动 JRE 目录,JVM 也会拒绝加载 CDS 存档。

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

can that be solved by regenerating the shared archive (using java -Xshare:dump)

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

Is there a mechanism in Java code to detect whether class data sharing is active or not?

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

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

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

"Is the Java code saved in a Class Data Sharing archive (classes.jsa) compiled natively or is it bytecode?"

取决于您所说的“本地编译”是什么意思。类元数据以特定于具体平台的 native 格式保存。但是没有编译字节码。没有提前编译,Java 字节码按原样保存在 CDS 存档中。

关于java - 通过复制目录安装 JRE 是否会影响类数据共享 (CDS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com