在 Hotspot JVM 中,为什么 CDS 需要 Compressed Oops?
In Hotspot JVM, why CDS needs Compressed Oops?
我阅读了这个 post“https://malloc.se/blog/zgc-jdk15”,最后一个索引大约是 Class Data Sharing
。
在这个索引中,
This feature(means CDS) only work when the Compressed Oops feature was enable(-XX:+UseCompressedOops).
我对CDS和Compress Oops略知一二,但不明白它们的关系
CDS(Class 数据共享)不需要压缩 OOP。但是,在 JDK 15 之前,它仅在默认配置下工作,其中 UseCompressedOops=true
和 UseCompressedClassPointers=true
.
JDK-8232069中描述了问题和解决方案。
要使 CDS 存档有效,UseCompressedOops
和 UseCompressedClassPointers
的运行时值必须与存档生成期间使用的值匹配。在 JDK-8232069 之前,这些值未保存在存档中,并且 JVM 假定已打开压缩 OOP(默认)。因此,CDS 与 ZGC 不兼容,因为 ZGC 需要关闭压缩 OOP。
为使CDS与ZGC兼容,JDK-8232069将UseCompressedOops
和UseCompressedClassPointers
的值写入存档,JVM启动时会检查当前是否标志匹配那些保存的值。所以现在(自 JDK 15)CDS 可以与压缩 OOP 的任一配置一起使用,现在它与 ZGC 兼容。
我阅读了这个 post“https://malloc.se/blog/zgc-jdk15”,最后一个索引大约是 Class Data Sharing
。
在这个索引中,
This feature(means CDS) only work when the Compressed Oops feature was enable(-XX:+UseCompressedOops).
我对CDS和Compress Oops略知一二,但不明白它们的关系
CDS(Class 数据共享)不需要压缩 OOP。但是,在 JDK 15 之前,它仅在默认配置下工作,其中 UseCompressedOops=true
和 UseCompressedClassPointers=true
.
JDK-8232069中描述了问题和解决方案。
要使 CDS 存档有效,UseCompressedOops
和 UseCompressedClassPointers
的运行时值必须与存档生成期间使用的值匹配。在 JDK-8232069 之前,这些值未保存在存档中,并且 JVM 假定已打开压缩 OOP(默认)。因此,CDS 与 ZGC 不兼容,因为 ZGC 需要关闭压缩 OOP。
为使CDS与ZGC兼容,JDK-8232069将UseCompressedOops
和UseCompressedClassPointers
的值写入存档,JVM启动时会检查当前是否标志匹配那些保存的值。所以现在(自 JDK 15)CDS 可以与压缩 OOP 的任一配置一起使用,现在它与 ZGC 兼容。