Java入门之了解JVM(28)

如“Object obj = new Object();”中的对象就属于强引用(前提是没有实现其他引用的接口),这种对象GC不会回收

软引用

继承了SoftReference类的对象(JDK1.2提供),继承了SoftReference寓意着不是必须但还有用JVM会在内存溢出之前将这类型的对象纳入第二次回收的范围,即换言之就是第一次GC并不是马上对这类对象进行回收,而是等到当第一次GC腾不出空间是再多执行一次GC来处理这些对象,当然如果第二次都腾不出空间就抛出OOM了弱引用

用于定义非必须的对象,通过继承WaekReference类来表示弱引用这类对象只能存活到下一次GC,即无论如何都会被回收掉虚引用

继承PhantomReference类的对象随时会被干掉一般用于确认对象是否被回收(通过引用队列)定义虚引用的唯一目的是,当虚引用被GC回收时能够收到通知对象的自我拯救

当一个对象被定义为不可达的时候,这个对象是不是“非死不可”呢?答案是并不是。而这个问题其实在面试题中经常性出现,而面试却并不是直接问你是不是“非死不可”,而是问你finalize()方法的作用;

推荐阅读