Java对象已死吗 深入理解Java虚拟机笔记

1、引用计数器法
给每个对象设置一个计数器,每当有一个引用就给计数器的值+1,引用时小时就减一,当计数器值为0是就可以回收掉了。
主流虚拟机都没有使用这种算法,循环依赖问题
2、可达性分析:
思路是通过一些列的“GC ROOTS”对象作为起始点,从这些对象往下搜索,搜索所走过的路线称为引用链,当一个对象到GC ROOTS没有任何引用链的时候,就说这个对象不可用

再谈引用:
1、强引用:代码之间普遍存在 ,垃圾收集器永远不会回收掉的对象
2、软引用:是指一些有用非必须的对象,在系统即将发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收
3、弱引用:强度比软引用低,智能生存到下一次GC
4、虚引用:唯一的目的是在这个对象被收集器会收拾收到一个系统通知,有什么实例吗?

4、生存还是死亡
即使可达性分析不可达的对象,也并不是非死不可,要宣告一个对象死亡,至少要经历两次标记过程;如果对象不可达,那他将被第一次标记,
并且进行一次筛选,筛选的条件是此对象否有有必要执行finalize()方法,当对象没有覆盖此方法或者该方法已经被虚拟机调用过,则被视为没有必要执行
有过有必要,则会放到一个F-QUEUE中,有一个低优先级的Finalizer县城区执行它,但并不会等该方法运行结束,finalize()是对象逃脱死亡的最后一次机会,使用this引用赋值,可以存活

posted @ 2021-08-25 16:26  酒窝没有酒  阅读(29)  评论(0编辑  收藏  举报