对Java中强引用、软引用、弱引用、虚引用的理解

摘要

极客时间里的Java核心技术系列,第4讲,记录一些笔记。
关键词:垃圾收集,引用计数,缓存,内存泄漏,可达性

铺垫

  • 引用 可以用来 JVM的垃圾回收工作,通过引用判断 对象 是否存活。
  • Java 堆中的对象,都有一个引用计数的属性,引用增加了1个,计数就加1。引用释放了1个,计数就减1。
  • 从JDK1.2开始,把引用划分为4个等级,就是题目所写的4个。

  • 所有引用类型,都是 java.lang.ref.Reference的子类。
    里面有个 get() 方法,可以获取引用的对象。 但是幻象引用返回的 null,所以幻象引用必须和引用队列联合使用(否则它就没有存在的意义了)。

强引用

就是我们最常见的普通对象的引用。即使OOM错误了,程序也不愿回收它,但是我们可以显示的赋值为null,就是可以被垃圾回收的了(具体什么时候回收还要看算法)。

  • 应用场景: (项目里到处都是。。。)
  • ArrayList 里的 clear() 方法就是 对每个元素赋值为null,成为可回收的。
    在这里插入图片描述

软引用

只有当 JVM 认为内存不足了,才会去回收它。

  • 应用场景:
    通常用来实现 内存敏感的缓存。
    如果内存够,就保留缓存;如果内存不够了,就释放缓存。

弱引用

垃圾收集器的线程一旦扫描到了具有 弱引用 的对象,不管内存够不够,在下一次GC过程中,都会去回收它。

  • 应用场景:
    可以维护一种非强制性的映射关系。
    试图去获取对象时,对象在,就使用它,否则重新实例化。

虚引用

也叫幻象引用。在任何时候都能被 垃圾收集器 回收。
仅仅是确保了对象被finalize之后,做某些事情的机制。

当垃圾收集器回收一个对象时,如果发现它有虚引用,就把他加入到相关联的引用队列中去,如果在引用队列里发现了相应的虚引用,就可以在所引用的对象被回收之前,做一些事情。

  • 应用场景:
    通常用来做所谓的 post-Mortem 清理机制。

Java 的不同可达性级别:

在这里插入图片描述

另外,也可以去尝试了解一下 reachabilityFence。
这将底层的一些能力暴露了出来,通过这些底层的API来达到强应用的效果。

参考链接:

https://juejin.im/post/5b82c02df265da436152f5ad
https://www.cnblogs.com/lingzhigege/p/11110272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值