如何构造perment 区溢出

本文深入解析了Java虚拟机中的永久代回收机制,包括常量池中的常量回收、无用类信息的回收条件以及如何通过配置避免全GC的影响。针对动态生成类导致的内存占用问题,提出了通过限制类的生命周期来优化内存管理的方法。

方法区(永久代):

  永久代的回收有两种:常量池中的常量,无用的类信息,常量的回收很简单,没有引用了就可以被回收。对于无用的类进行回收,必须保证3点:

  1. 类的所有实例都已经被回收
  2. 加载类的ClassLoader已经被回收
  3. 类对象的Class对象没有被引用(即没有通过反射引用该类的地方)
     永久代的回收并不是必须的,可以通过参数来设置是否对类进行回收。 HotSpot提供-Xnoclassgc进行控制
     使用-verbose,-XX:+TraceClassLoading、-XX:+TraceClassUnLoading可以查看类加载和卸载信息
     -verbose、-XX:+TraceClassLoading可以在Product版HotSpot中使用;
     -XX:+TraceClassUnLoading需要fastdebug版HotSpot支持
——————

1.在实际应用场景中,遇到 线上 因perment区,被沾满 而导致FULL gc(可配置)

场景中,每个业务请求都会动态生成构造一个类(通过字节码构造,每个类都是不同的),并为此类实例化一个对象给业务方使用,动态生成的类描述对象会存在于Perm区. 于是perm满了,又因为配置了 可回收,会先进行full gc.  (业务巅峰 是周期型的)


上图中 可见, 有很多类似的类, 每个实例只有1个


2.loop 构造静态数据


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值