温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Metaspace元空间

发布时间:2020-06-26 15:09:46 来源:网络 阅读:737 作者:爱与梦想 栏目:软件技术

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI