JDK8 Metaspace元数据区介绍

Java 启动参数分为三类:

1. 标准选项:这类选项的功能是很稳定的,在后续版本中也不太会发生变化,即使有变化也必须保证向后兼容。运行java或java -help可以看到所有的标准选项。所有的标准选项都是以“-”开头,比如-version,-server等。

2. X选项:比如-Xms。这类选项以“-X”开头,它们也被称为X选项。运行java -X命令可以看到所有的X选项。这类选项的功能还是很稳定,但是官方的说法是它们的行为可能在后续版本中改变,也有可能不在后续版本中提供了。

3. XX选项:这类选项是属于实验性,主要是给JVM开发者用于开发和调试JVM的,在后续版本中行为有可能会变化。

 

从JDK8开始,永久代(PermGen)的概念被废弃掉了,取而代之的是一个称为Metaspace的存储空间。Metaspace使用的是本地内存,也就是说在默认情况下Metaspace的大小只与本地内存大小有关。

 

Metaspace元数据区可以通过以下几个参数进行控制(以下N的单位均为Byte):

1. -XX:MetaspaceSize=N

这个参数是初始化Metaspace大小。该值越大出发Metaspace GC的时机就越晚。随着GC的到来,虚拟机会根据实际情况调控Metaspace的大小,可能增加也可能降低。在默认情况下,这个值的大小根据不同的平台在12M到20M浮动。使用java -XX:+PrintFlagsInitial命令查看本机的初始化参数,Metaspacesize为21810376B(约20.8M)。

 

2. -XX:MaxMetaspaceSize=N

这个参数用于限制Metaspace的上限,防止其无限使用本地内存,影响到其他程序。在本机上默认值为4294967295B(大约4096MB)。

 

3. -XX:MinMetaspaceFreeRatio=N

当进行过Metaspace GC之后,会计算当前Metaspace的空闲空间比,如果空闲比小于这个参数,那么虚拟机将增长Metaspace的大小。在本机该参数的默认值为40,即40%。设置该参数可以控制Metaspace的增长速度,太小的值会导致Metaspace增长缓慢,Metaspace的使用逐渐趋于饱和,可能会影响之后类的加载。而太大的值会导致Metaspace增长的过快,浪费内存。

 

4. -XX:MaxMetaspaceFreeRatio=N

当进行过Metaspace GC之后,会计算当前Metaspace的空闲空间占比,如果空闲比大于这个参数,那么虚拟机会释放Metaspace的部分空间。在本机该参数的默认值为70,也就是70%。

 

5. -XX:MaxMetaspaceExpansion=N

Metaspace增长时的最大幅度。在本机上该参数的默认值为5452592B(大约为5MB)。

 

6. -XX:MinMetaspaceExpansion=N

Metaspace增长时的最小幅度。在本机上该参数的默认值为340784B(大约为330KB)。

 

参考博客:

1. https://www.jianshu.com/p/dd1c20c44a45 GC之Metaspace元数据区

2. https://www.cnblogs.com/w-wfy/p/6415856.html java--jvm启动参数

3. https://blog.csdn.net/Saintyyu/article/details/90760516 Hotspot JVM常用选项

你可能感兴趣的:(Java基础)