Java的强弱软虚引用,面试总结与详解

这篇博客主要用于记录和总结看到的一些比较好的关于强弱软虚引用的知识点,用于面试,会附上参考博客。

总结

总结博客参考:总结链接

JDK1.2之前只有强引用,其他几种引用都是在JDK1.2之后引入的.

  • 强引用(Strong Reference) 最常用的引用类型,如Object obj = new Object(); 。只要强引用存在则GC时则必定不被回收,即使由于内存不足而抛出异常。如果想要将其回收,需要赋值null。如ArrayList的clear方法。

  • 软引用(Soft Reference) 用于描述还有用但非必须的对象,当堆将发生OOM(Out Of Memory)时则会回收软引用所指向的内存空间,若回收后依然空间不足才会抛出OOM。一般用于实现内存敏感的高速缓存。 当真正对象被标记finalizable以及的finalize()方法调用之后并且内存已经清理, 那么如果SoftReference object还存在就被加入到它的 ReferenceQueue.只有前面几步完成后,Soft Reference和Weak Reference的get方法才会返回null。常用于浏览器页面加载的实现,上一页面是否缓存到内存中,取决于内存的状态

  • 弱引用(Weak Reference) 发生GC时必定回收弱引用指向的内存空间。 和软引用加入队列的时机相同。当你想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候你就是用弱引用

  • 虚引用(Phantom Reference) 又称为幽灵引用或幻影引用,虚引用既不会影响对象的生命周期,也无法通过虚引用来获取对象实例,仅用于在发生GC时接收一个系统通知。 当一个对象的finalize方法已经被调用了之后,这个对象的幽灵引用会被加入到队列中。通过检查该队列里面的内容就知道一个对象是不是已经准备要被回收了. 虚引用和软引用和弱引用都不同,虚引用必须和引用队列联合使用,它会在内存没有清理的时候被加入引用队列

详解链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章