Java面试-强引用、软引用、弱引用、幻象引用有什么区别?

强引用、软引用、弱引用、幻象引用有什么区别?

这道面试题,属于既偏门又非常高频的一道题目,需要好好的记录一下。

不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响

  • 强引用:

我们常用的编码如:Object obj = new Object();中的obj就是强引用,通过关键字new创建的普通对象都是强引用

只要强引用指向一个对象,就能表明对象还存在,垃圾收集器就不会碰这种对象

对于一个普通的对象,如果没有其他的引用关系,只要超出了引用的作用域或者显示的将强引用赋值为null,就可以被垃圾回收收集了

  • 软引用

软引用生命周期比强引用短一些

当JVM认为内存不足时,会去试图回收软引用指向对象

如果JVM认为内存空闲,会暂时保留软引用

  • 弱引用

弱引用的生命周期比软引用更短,在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了具有弱引用的对象,无论当前内存空间是否不足,都会回收它的内存

  • 幻象引用

幻象引用也叫虚引用

幻象引用用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用

发布了26 篇原创文章 · 获赞 27 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41170102/article/details/104695381