校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > java语言 > 传值&引用(后序会删除)
题目

Java的四种引用,强弱软虚,以及用到的场景

解答

利用软引用和弱引用解决OOM问题:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的问题。

通过软可及对象重获方法实现Java对象的高速缓存:比如我们创建了一Employee的类,如果每次需要查询一个雇员的信息。哪怕是几秒中之前刚刚查询过的,都要重新构建一个实例,这是需要消耗很多时间的。我们可以通过软引用和 HashMap 的结合,先是保存引用方面:以软引用的方式对一个Employee对象的实例进行引用并保存该引用到HashMap 上,key 为此雇员的 id,value为这个对象的软引用,另一方面是取出引用,缓存中是否有该Employee实例的软引用,如果有,从软引用中取得。如果没有软引用,或者从软引用中得到的实例是null,重新构建一个实例,并保存对这个新建实例的软引用。

强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。

软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。

弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。不过由于垃圾回收器是一个优先级较低的线程,所以并不一定能迅速发现弱引用对象。

虚引用:顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收。

C 7条回复 评论
南城以北是片海

安利一款我用过最好用的接口测试工具——apipost ,页面简洁,操作简单功能也多。

发表于 2021-09-13 21:20:00
0 0
假期

软引用软引用

发表于 2021-03-07 23:26:37
0 0
假期

软引用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关

发表于 2021-01-19 23:06:31
0 0
落烬

平时编写代码用的强引用。软引用适合用来进行缓存,当内存不够时能让JVM回收内存。弱引用能用来在回调函数中防止内存泄露。

发表于 2021-01-19 14:53:34
0 0
刘帅

强引用,弱引用,软引用,隐引用

发表于 2021-01-19 10:30:45
0 1
五分i

强引用,弱引用,软引用,虚引用

发表于 2021-01-19 10:02:41
0 0
wtt

强引用、软引用、弱引用、虚引用

发表于 2020-10-30 10:19:38
0 0