Metaspace元空间

1.元空间:

元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。

但可以通过以下参数来指定元空间的大小: 

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

  2. -XX:MaxMetaspaceSize=N 
    这个参数用于限制Metaspace增长的上限,防止因为某些情况导致Metaspace无限的使用本地内存,影响到其他程序。在本机上该参数的默认值为4294967295B(大约4096MB)。

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

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

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

  6. -XX:MinMetaspaceExpansion=N 
    Metaspace增长时的最小幅度。在本机上该参数的默认值为340784B(大约330KB为)。

2.元空间内存管理

元空间的内存管理由元空间虚拟机来完成。先前,对于类的元数据我们需要不同的垃圾回收器进行处理,现在只需要执行元空间虚拟机的C++代码即可完成。

在元空间中,类和其元数据的生命周期和其对应的类加载器是相同的。

话句话说,只要类加载器存活,其加载的类的元数据也是存活的,因而不会被回收掉。 
准确的来说,每一个类加载器的存储区域都称作一个元空间,所有的元空间合在一起就是我们一直说的元空间。

当一个类加载器被垃圾回收器标记为不再存活,其对应的元空间会被回收。

可以参考文章:

https://blog.csdn.net/bolg_hero/article/details/78189621

https://www.cnblogs.com/williamjie/p/9558136.html

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/192166.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

相关推荐

发表回复

登录后才能评论