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