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