java中的强引用、软引用、弱引用、 虚引用
- - 编程语言 - ITeye博客 今晚接触到一种说法,就是软引用,查了一下,原来还有其他引用. 各种百度和谷歌总算有点头绪,虽然不是很懂,但是总结一下. ⑴强引用(StrongReference). 强引用是使用最普遍的引用. 如果一个对象具有强引用,那垃圾回收器绝不会回收它. 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题.
今晚接触到一种说法,就是软引用,查了一下,原来还有其他引用!!各种百度和谷歌总算有点头绪,虽然不是很懂,但是总结一下。之后看容易些~
Object obj = new Object();
Object obj = new Object(); WeakReference softRef = new WeakReference(obj); // 使用 softRef.get() 获取软引用所引用的对象 Object objg = softRef.get();
public static void main(String[] args) throws InterruptedException { Object obj = new Object(); ReferenceQueue<Object> refQueue = new ReferenceQueue<Object>(); WeakReference<Object> weakRef = new WeakReference<Object>(obj, refQueue); System.out.println(weakRef.get()); System.out.println(refQueue.poll()); obj = null; System.gc(); System.out.println(weakRef.get()); System.out.println(refQueue.poll()); }
public static void main(String[] args) throws InterruptedException { Object obj = new Object(); ReferenceQueue<Object> refQueue = new ReferenceQueue<Object>(); PhantomReference<Object> phanRef = new PhantomReference<Object>(obj, refQueue); System.out.println(phanRef.get()); System.out.println(refQueue.poll()); obj = null; System.gc(); System.out.println(phanRef.get()); System.out.println(refQueue.poll()); }