一线大厂面试真题——强引用、软引用、弱引用、虚引用有什么区别

概述

“强引用、软引用、弱引用、虚引用有什么区别?”

这个问题难倒了很多资深Java工程师,不是因为这个问题本身有多难。而是确实它是一个比较小众的知识点。

回答

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

强引用

就是普通对象的引用,只要还有强引用指向一个对象,就能表示对象还“活着”,垃圾收集器无法回收这一类对象。

只有在没有其他引用关系,或者超过了引用的作用域,再或者显示的把引用赋值为null的时候,垃圾回收器才能进行内存回收。

软引用

是一种相对强引用弱化一些的引用,可以让对象豁免一些垃圾收集,只有当JVM认为内存不足时,才会去试图回收软引用指向的对象。

软引用通常用来实现内存敏感的缓存,如果还有空闲内存,就可以暂时保留缓存,当内存不足时清理掉,这样就保证了使用缓存的同时,不会耗尽内存。

弱引用

相对强引用而言,它允许在存在引用关联的情况下被垃圾回收的对象在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,垃圾回收期都会回收该内存虚引用,它不会决定对象的生命周期,它提供了一种确保对象被finalize以后,去做某些事情的机制。

虚引用

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要进行垃圾回收,然后们就可以在引用的对象的内存回收之前采取必要的行动。

点评

这是一个好问题,它整体涉及到的知识点,如果要深度挖掘。

还可以往对象的可达性状态分析以及GC的回收原理进行展开。

不过确实也是一个比较偏门的问题,更多会应用在一些类库或者框架里面。

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 11:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 11:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 11:22:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 11:22:02       20 阅读

热门阅读

  1. IDEA 宝贝插件

    2024-04-03 11:22:02       16 阅读
  2. IntelliJ IDEA - 快捷键 Win & Mac 对照表

    2024-04-03 11:22:02       14 阅读
  3. openshift和k8s的差别

    2024-04-03 11:22:02       12 阅读
  4. RuoYi单体版Table行内编辑

    2024-04-03 11:22:02       16 阅读
  5. 研究应用推广开源项目——提高软件技术的途径

    2024-04-03 11:22:02       15 阅读
  6. LTP测试工具

    2024-04-03 11:22:02       14 阅读
  7. 对seata的seata.tx-service-group理解

    2024-04-03 11:22:02       12 阅读