【问题标题】:In Hotspot JVM, why CDS needs Compressed Oops?在 Hotspot JVM 中,为什么 CDS 需要 Compressed Oops?
【发布时间】:2021-10-06 10:27:51
【问题描述】:

我读了这篇文章“https://malloc.se/blog/zgc-jdk15”,最后一个索引大约是Class Data Sharing。 在这个索引中,

此功能(表示 CDS)仅在启用 Compressed Oops 功能时有效(-XX:+UseCompressedOops)。

我对 CDS 和 Compress Oops 了解一些,但我无法理解它们之间的关系。

【问题讨论】:

    标签: java jvm-hotspot


    【解决方案1】:

    CDS(类数据共享)不需要压缩 OOP。但是,在 JDK 15 之前,它只能在默认配置下工作,UseCompressedOops=trueUseCompressedClassPointers=true

    问题和解决方法在JDK-8232069中描述。

    要使 CDS 存档有效,UseCompressedOopsUseCompressedClassPointers 的运行时值必须与存档生成期间使用的值匹配。在 JDK-8232069 之前,这些值未保存在存档中,并且 JVM 假定已打开 Compressed OOP(默认设置)。因此,CDS 与 ZGC 不兼容,因为 ZGC 需要关闭 Compressed OOP。

    为了使 CDS 与 ZGC 兼容,JDK-8232069 将 UseCompressedOopsUseCompressedClassPointers 的值写入存档,当 JVM 启动时,它会检查当前标志是否与这些保存的值匹配。所以现在(从 JDK 15 开始)CDS 可以与 Compressed OOPs 的任一配置一起使用,现在它与 ZGC 兼容。

    【讨论】:

    • 正是我想要的。感谢回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多