(转)Java回收对象的标记 和 对象的二次标记过程

Java回收对象的标记 和 对象的二次标记过程

二次标记

针对这个问题,虚拟机的做法是进行两次标记,即第一次标记不在“关系网”中的对象。第二次的话就要先判断该对象有没有实现finalize()方法了,如果没有实现就直接判断该对象可回收;如果实现了就会先放在一个队列中,并由虚拟机建立的一个低优先级的线程去执行它,随后就会进行第二次的小规模标记,在这次被标记的对象就会真正的被回收了。

finalize()在什么时候被调用?
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法

 

JVM进阶(六)——鲜为人知的二次标记

举例说明

原文地址:https://www.cnblogs.com/lixuwu/p/10760345.html