我读过这篇文章"https://malloc.se/blog/zgc-jdk15",而最后一个索引是关于Class Data Sharing的。
此特性(意味着CDS)仅在启用压缩Oops功能(-XX:+UseCompressedOops)时才能工作。
我知道CDS和压缩Oops一点,但我不能理解他们之间的关系。
发布于 2021-10-06 02:27:51
CDS (类数据共享)不需要压缩OOPs。但是,在JDK 15之前,它只在默认配置( UseCompressedOops=true和UseCompressedClassPointers=true )中工作。
问题和解决方案在JDK-8232069中进行了描述。
要使CDS存档有效,UseCompressedOops和UseCompressedClassPointers的运行时值必须与归档生成期间使用的值相匹配。在JDK-8232069之前,这些值没有保存在归档文件中,JVM假定打开了压缩的OOPs (默认)。因此,CDS与ZGC不兼容,因为ZGC需要关闭压缩OOPs。
为了使CDS与ZGC兼容,JDK-8232069将UseCompressedOops和UseCompressedClassPointers的值写入存档,并在JVM启动时检查当前标志是否与保存的值匹配。因此,现在(从JDK 15开始) CDS可以使用任何一种压缩OOPs配置,现在它与ZGC兼容。
https://stackoverflow.com/questions/69458900
复制相似问题