从永久代(PermGen)到元空间(Metaspace)

本文介绍了JVM中永久代(PermGen)被移除并替换为元空间(Metaspace)的原因,包括永久代存在的问题、元空间的优势以及其内存分配、大小调整和监控。元空间允许类元数据在本地内存中分配,解决了永久代的内存溢出问题,但仍然需要注意类加载器可能导致的内存泄漏。通过JVM参数可以管理Metaspace的大小,以避免过度使用本地内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要做这个转换?总结以下几点原因:

1、字符串存在永久代中,容易出现性能问题和内存溢出。

2、类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。

4、Oracle 可能会将HotSpot 与 JRockit 合二为一。

名词概念:
元空间: Metaspace

1,大部分类元数据都在本地内存中分配。

2,默认情况下,类元数据只受可用的本地内存限制(容量取决于是32/64位操作系统的可用虚拟内存大小)。

3,新参数(MaxMetaspaceSize)用于限制本地内存分配给类元数据的大小。如果没有指定这个参数,元空间会在运行时根据需要动态调整。

4,对于将死的类及类加载器的垃圾回收将在元数据使用达到“MaxMetaspaceSize”参数的设定值时进行。

5,实时地监控和调整元空间对于减小垃圾回收频率和减少延时是很有必要的。持续的元空间垃圾回收说明,可能存在类、类加载器导致的内存泄漏或是大小设置不合适。

永久代: PermGen

1, 这部分内存空间将全部移除。
2, JVM的参数:PermSize 和 MaxPermSize 会被忽略并给出警告(如果在启用时设置了这两个参数)。

元空间的特点:

1,每个加载器有专门的存储空间。
2,不会单独回收某个类。
3,元空间里的对象的位置是固定的。
4,如果发现某个加载器不再存货了,会把相关的空间整个回收。

详情介绍:

随着JDK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值