对象已死!
1)引用计数算法
llReference Counting
2)可达性分析算法
GC Roots
可作为GC Roots的对象包括下面几类:
虚拟机钱(栈帧中的本地变量表)中引用的对象。
方法区中类静态属性引用的象。
方法区中常量引用的对象。.
本地方法战中JNI (native方法)引用的判象。
3)再谈引用
Strong ReferenceSoft ReferencePhantom Reference),它们的引用强度依次逐渐减弱。
强引用就是指在程序代码之中普遍在在的。类似Object obj = new Object(),只要强引用还存在,,垃圾收集器永远不会回收据被引用的对象。
软引用是用来描述一些还有用但并非必需的对象。对于软引用所联着的对象。在系统将要发生内存溢出异常之前。将会把这些对象列进垃圾回收范围之中进行第二次回收。如果这次回收还是没有足够的内存,才会抛出内存谧出异常。在JDK1.2之后,提供了Soft Reference类来实现软引用。
弱引用也是用来描述非必需对象的。被弱引用关联的对象只能生存到下一次垃墩收集发生之前。当垃圾收集器工作肘,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK 1.2
虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无也通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是希望能在这个对象被收集器回收时收到一个系统通知。在JDK 1.2
4)生存还是死亡
fnalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为“没有必、要执行”。
finalize
5)方法回收区
3个条件才能算是“无用的类”:
该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。
加载该类的ClassLoader已经被回收。
该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法
【参见】【深入理解Java虚拟机(第二版)】【周志明】
【首发】【】
人言未必皆真,听言只听三分。