CompressedClassSpaceSize区域是否包含MaxMetaspaceSize区域?

问题描述 投票:0回答:1

什么是CompressedClassSpaceSize

CompressedClassSpaceSizeMetaspaceSize之间有什么关系?

java jvm
1个回答
5
投票

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

类元数据包括:

  • Java类的内部表示
  • 方法及其字节码
  • 字段描述符
  • 恒定的游泳池
  • 符号
  • 注释
  • 等等

-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
© www.soinside.com 2019 - 2024. All rights reserved.