遇到刁钻面试题如何回答Java中,4种对象引用之间的区别是什么?
一位工作4年的小伙伴面试被问到这样一道题,说Java中,4种对象引用之间的区别是什么?这道面试题问得比较偏门,更多应用在一些底层类库或者是框架中,涉及到的知识点包括JVM、GC等,一般人确实很少关注。
Java中的4种引用类型主要是指强、软、弱、虚,
ENTER TITLE
它们主要是体现对象不同的可达性状态和对GC的影响。下面我给大家详细地分析一下我对这四种引用类型的理解。
ENTER TITLE
1、强引用:只要引用关系还在,对象就永远不会被回收。
其实就是指普通对象的引用,只要还有引用关系存在,就表示对象还活着,垃圾收集器无法回收这一类对象。只有在没有其他引用关系或者超过引用作用域,再或者是将对象引用强制赋值为null的情况下,垃圾收集器才会去回收这个对象。
ENTER TITLE
2、软引用:非必须存活的对象,JVM会在内存溢出前对其进行回收。
是一种相对于强引用来说弱一些的引用。可以让对象豁免一些垃圾收集的操作。只有当JVM判断内存不足的时候,才会试图回收引用指向的对象。那软引用通常是用来实现内存敏感的一些缓存,如果还有空闲内存就可以暂时保留缓存,当内存不足的时候会清理掉。这样就可以保证使用缓存的同时,不会耗尽内存。
ENTER TITLE
3、弱引用:非必须存活的对象,不管内存是否够用,下次GC一定回收。
弱引用是相对于强引用而言的,它是允许存在引用关联的情况下,能被垃圾回收的对象。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现只具有弱引用的对象的时候,不管当前的内存空间是否足够,垃圾回收器都会回收这个内存。
ENTER TITLE
4、虚引用:等同于没有引用,对象被回收时会收到通知。
虚引用不会决定对象的生命周期,它提供一种确保对象被finalize以后,去做某些事情的机制。当垃圾回收期准备去回收一个对象的时候,如果发现他还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中,程序可以通过判断引用队列是否已经加入虚引用,来决定被引用对象是否要被垃圾回收器回收。然后,我们就可以在引用对象被回收之前执行一些必要的操作。所以,虚引用必须和引用队列一起使用,
ENTER TITLE
以上的分享还是比较官方,举个通俗例子,大家就会更容易理解。
强引用就好比电视剧中的男主角,怎么都死不了。
软引用就像女主角,虽有一段经历,还是没走到最后。
弱引用就是男二号,注定用来牺牲的。
虚引用就是路人甲了。
以上就是我对Java中4种引用对象的理解。有兴趣的小伙伴,可以更进一步去研究一下。
我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请动动手指分享给更多的人。
相关文章
- 技术实践丨体验量子神经网络在自然语言处理中的应用
- 如何解决回归任务数据不均衡的问题?
- 应对全场景AI框架部署挑战,MindSpore“四招”让你躺平
- 教你三种jQuery框架实现元素显示及隐藏动画方式
- 一文你带快速认识Vue-Router路由
- AI如何提升10倍筛药效率?6月18日华为云携手中科院上海药物所揭开谜底
- 我的编辑器能玩贪吃蛇,一起玩不?
- 教你在Kubernetes中快速部署ES集群
- 毕昇 JDK:为啥是ARM 上超好用的 JDK
- 带你剖析鸿蒙轻内核任务栈的源代码
- 一文教会你认识Vuex状态机
- 解读8大场景下Kunpeng BoostKit 使能套件的最佳能力和实践
- 解读革命性容器集群CCE Turbo:计算、网络、调度全方位加速
- GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率
- 五层验证系统,带你预防区块链业务漏洞
- 从原理到实践,手把手带你轻松get数仓双集群容灾
- 搞定研发知识管理,你的企业就能跑快一步
- 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!
- 华为云IoT设备接入服务全体验
- 踩准时钟节拍、玩转时间转换,鸿蒙轻内核时间管理有妙招