方法区(永久代):
永久代的回收有两种:常量池中的常量,无用的类信息,常量的回收很简单,没有引用了就可以被回收。对于无用的类进行回收,必须保证3点:
- 类的所有实例都已经被回收
- 加载类的ClassLoader已经被回收
- 类对象的Class对象没有被引用(即没有通过反射引用该类的地方)
使用-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 构造静态数据
本文深入解析了Java虚拟机中的永久代回收机制,包括常量池中的常量回收、无用类信息的回收条件以及如何通过配置避免全GC的影响。针对动态生成类导致的内存占用问题,提出了通过限制类的生命周期来优化内存管理的方法。
84

被折叠的 条评论
为什么被折叠?



