CompressedClassSpaceSize

CompressedClassSpaceSize

什么是CompressedClassSpaceSize
CompressedClassSpaceSizeMetaspaceSize之间是什么关系?

最佳答案

Metaspace 是用于存储类元数据的内存区域-在解析.class文件时创建的内部JVM结构。

类元数据包括:

  • Java类的内部表示形式
  • 方法及其字节码
  • 字段描述符
  • 常量池
  • 符号
  • 批注
  • 等。
  • -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
    

    10-01 18:24