什么是CompressedClassSpaceSize
?
CompressedClassSpaceSize
和MetaspaceSize
之间是什么关系?
答案 0 :(得分:5)
元空间是用于存储类元数据的存储区,该元数据是在解析.class
文件时创建的内部JVM结构。
类元数据包括:
-XX:MaxMetaspaceSize
默认不受限制。
当-XX:+UseCompressedClassPointers
选项为ON(堆<32G的默认设置)时,类从Metaspace移到名为 Compressed Class Space 的单独区域。这是为了使用32位值而不是64位来寻址VM类结构。
因此,压缩类空间包含Java类的内部表示形式,而元空间则包含所有其余的元数据:方法,常量池,注释等。
压缩类空间的大小受-XX:CompressedClassSpaceSize
的限制,默认情况下为1G。 -XX:CompressedClassSpaceSize
的最大可能值为3G。
非类元空间和压缩类空间是两个不相交的区域。 MaxMetaspaceSize
限制了两个区域的承诺大小:
committed(Non-class Metaspace) + committed(Compressed Class Space) <= MaxMetaspaceSize
如果将MaxMetaspaceSize
设置为小于CompressedClassSpaceSize
,则后者会自动减小为
CompressedClassSpaceSize = MaxMetaspaceSize - 2*InitialBootClassLoaderMetaspaceSize