三明网站建设公司,公司后台网站怎么做,网络规划设计师教程(第2版)pdf,做餐饮加盟的网站建设上篇文章介绍了jvm运行时候对象进入老年代的场景#xff0c;以及如何避免频繁fullGC。
Jvm参数设置-JVM#xff08;八#xff09;
老年代分配担保机制
这个机制的目的是为了提升效率#xff0c;在minorGC之前#xff0c;会有三次判断#xff0c;之后再次minorGC速度会…上篇文章介绍了jvm运行时候对象进入老年代的场景以及如何避免频繁fullGC。
Jvm参数设置-JVM八
老年代分配担保机制
这个机制的目的是为了提升效率在minorGC之前会有三次判断之后再次minorGC速度会很快。
老年代剩余空间是否 大于 年轻代里现在所有对象
大于的话则直接minorGC
如果不大于则看看参数是否配置-XX:-HandlerPromotionFailure
没有配置则直接fullGC
配置了则看看 老年代剩余可用空间是否 大于 每次minorGC后进入老年代的平均值
大于的话直接minorGC否则直接fullGC
FullGC之后最后还是会minorGC。 对象内存回收
引用计数器
这个方法简单效率高但目前主流虚拟机没有用表格这个算法主要不能解决循环引用问题。因为两者相互引用导致他们引用计数器不为0而引用计数器必须是为0才会回收。 可达性分析算法
将GC roots对象作为节点向下搜索找到对象都标记为 非垃圾对象其余未标记的都是 垃圾对象。
GC roots根节点线程栈本地变量静态变量本地方法栈变量等。 常见引用类型
引用类型强引用软引用弱引用虚引用
强引用User user new User;软引用用SoftReference软引用类型包裹对象 正常不会被回收但GC做完释放不出空间放新对象则会回收。软引用可以作用在内存敏感的高速缓存。
SoftReferenceUser user new SoftReferenceUser(new User());
软引用在实际场景很重要例如浏览器后退按钮这个后退是重新加载还是从缓存里取这要看实际应用场景。
如果一个浏览器进入新页面就内容回收则需要重新加载。如果浏览页面内存很大放在内存会内存溢出。
弱引用GC每次会直接回收。
WeakReferenceUser user new WeakReferenceUser(new User());
虚引用也成为幽灵引用几乎不用。
finalize()方法最终判断对象是否存活
当对象背回收之前会判断这个对象是否覆盖了finalize方法如果覆盖了在回收之前则会执行这个方法不回收则不执行。
既然在回收之前会执行那么自然可以自救可以把当前对象放入静态list集合保证在使用则不会被收回。不推荐使用
如何判断一个类是无用的类
方法区如果发生回收的条件必须这个类是无用的类
该类所有对象实例都被回收也就是java堆中不存在该类任何实例。加载该类的ClassLoader已经被回收。CLassLoader回收条件很苛刻
前面说过引导类核心包BootStrapClassLoader扩展ClassLoader以及appClassLoader应用程序的classLoader这些不会被回收。
但是jsp的加载器每个jsp都对应一个新的加载器这种加载器就很容易被回收。一般自定义的才会回收
该类的java.lang.Class对象没有地方被引用无法在任何地方通过反射访问该类信息。