3.不可视阶段:
先看一段代码:
1 public void process(){ 2 try{ 3 Object obj = new Object(); 4 obj.doSomething(); 5 } 6 catch(Exception e){ 7 e.printStackTrace(); 8 } 9 while(isLoop){ 10 //这个区域对于obj对象来说已经是不可视的了 11 //因此下面的代码在编译时会引发错误 12 obj.doSomething(); 13 } 14 } |
如果一个对象已使用完了,应该主动将其设置为null,可以在上面的代码行obj.doSomething();下添加代码行obj=null;这样一行代码强制将obj对象置为空值,这样做的意义就是帮助JVM及时的发现这个垃圾对象,并且可以及时的回收该对象占用的系统资源。
4.不可到达阶段:
处于不可到达阶段的对象,在虚拟机所管理的对象引用根集合中再也找不到直接或间接的强引用,这些对象通常是指多有线程栈中的临时变量,所有已装载的类的静态变量或者对本地代码接口(JNI)引用。
5.可收集阶段、终结阶段与释放阶段:
当对象处于这个阶段的时候,可能处于下面三种情况:
(1)垃圾回收器发现该对象已经不可到达。
(2)finalize方法已经被执行。
(3)对象空间已被重用。
当对象处于上面三种清空的时候,虚拟机就可以直接将该对象回收了。
好了,总算写完了。希望对大家有益。