问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中软引用的使用?

发布网友 发布时间:2022-04-29 22:28

我来回答

1个回答

热心网友 时间:2023-10-09 18:57

垃圾收集器如何处理 References
  弱引用和软引用都扩展了抽象的 Reference 类(虚引用(phantom references)也一样,这将在以后的文章中介绍)。引用对象被垃圾收集器特殊地看待。垃圾收集器在跟踪堆期间遇到一个 Reference 时,不会标记或跟踪该引用对象,而是在已知活跃的 Reference 对象的队列上放置一个 Reference。在跟踪之后,垃圾收集器就识别软可及的对象 —— 这些对象上除了软引用外,没有任何强引用。垃圾收集器然后根据当前收集所回收的内存总量和其他策略考虑因素,判断软引用此时是否需要被清除。将被清除的软引用如果具有相应的引用队列,就会进入队列。其余的软可及对象(没有清除的对象)然后被看作一个根集(root set),堆跟踪继续使用这些新的根,以便通过活跃的软引用而可及的对象能够被标记。
  处理软引用之后,弱可及对象的集合被识别 —— 这样的对象上不存在强引用或软引用。这些对象被清除和加入队列。所有 Reference 类型在加入队列之前被清除,所以处理事后检查(post-mortem)清除的线程永远不会具有 referent 对象的访问权,而只具有 Reference 对象的访问权。因此,当 References 与引用队列一起使用时,通常需要细分适当的引用类型,并将它直接用于您的设计中(与 WeakHashMap 一样,它的 Map.Entry 扩展了 WeakReference)或者存储对需要清除的实体的引用。
  引用处理的性能成本
  引用对象给垃圾收集过程带来了一些附加的成本。每一次垃圾收集,都必须构造活跃 Reference 对象的一个列表,而且每个引用都必须做适当的处理,这给每次收集添加了一些每个 Reference 的开销,而不管该 referent 此时是否被收集。Reference 对象本身服从于垃圾收集,并且可在 referent 之前被收集,在这样的情况下,它们没有加入队列。
  基于数组的集合
  当数组用于实现诸如堆栈或环形缓冲区之类的数据结构时,会出现另一种形式的对象游离。清单 3 中的 LeakyStack 类展示了用数组实现的堆栈的实现。在 pop() 方法中,在顶部指针递减之后,elements 仍然会保留对将弹出堆栈的对象的引用。这意味着,该对象的引用对程序来说仍然可及(即使程序实际上不会再使用该引用),这会阻止该对象被垃圾收集,直到该位置被未来的 push() 重用。
  清单 3. 基于数组的集合中的对象游离
public class LeakyStack {
 private Object[] elements = new Object[MAX_ELEMENTS];
 private int size = 0;
 public void push(Object o) { elements[size++] = o; }
 
 public Object pop() {
  if (size == 0)
   throw new EmptyStackException();
  else {
   Object result = elements[--size];
   // elements[size+1] = null;
  return result;
 }
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...油桶横放长6、25米,圆的直径为2、05米,液体横放的高度为1、8米。求... 一个圆桶半径为1.2米,高为12米,现将油桶平放,此时装油的高度为1.722米... 大油桶是横放的,油桶圆的直径是2.15米,长是3.6米,里面的净油位高度... 一个圆柱油桶横着放,长5.5米,直径2.4米,里面装着油,油高度1米,求现在... 有一个圆柱体桶横放,长7米,高2.7米,里面装的油与油桶距离1.2米,求油的... 圆柱形油桶横放时油部分占底面圆周的三分之一当油桶直立油的高度和桶... 有一个圆柱体桶横放 有一个圆柱体桶横放 长9.4米 高2.6米 里面装的油与桶底距离0.6米,求里 ... 电脑单独安装outlook教程如何在电脑上安装outlook 直角转弯为什么会压角 温网只能穿白色的球衣么,为什么? 德约科维奇什么时候能超越费德勒,成为新的大满贯之王? Java中什么是对象什么是引用还有枚举,求大佬解决最好用表达式。_百度知 ... 为什么澳网,法网,温网,美网是四大满贯赛?是什么时候开始的? 登不上,显示账号或密码错误怎么回事? 为什么温网的男女运动员都统一穿白色的球服? 为什么选手们在温网都只穿白色服装? android中四大引用的区别,强引用,软引用,弱引用和虚引用 Java:对象的强,软,弱和虚引用的区别 Java等相关基础问题? 谁能解释下JAVA中的强引用、弱引用、软引用、虚引用,尽量通俗点,谢谢!! 盘点杨幂一共拍了多少部电视剧,【免费高清】在线观看百度网盘资源 盘点杨幂出名的电视剧,【免费高清】在线观看百度网盘资源 跪求杨幂一共演过多少部电视剧,【在线观看】免费百度云资源 跪求杨幂演什么电视剧,【免费高清】在线观看百度网盘资源 盘点杨幂拍过的电视剧全部,【在线观看】免费百度云资源 求杨幂的《有点舍不得》mp3完整版,不要1分30秒的,谢谢~~~知道的请发邮箱:296883945@qq.com 谢谢哦 跪求杨幂演电视剧,【免费高清】在线观看百度网盘资源 杨幂一分钟百度网盘 谁有 - 信息提示 mysql-5.6.30在CentOS-6.5下安装了,但无法正常使用 浙江省衢州市驾驶证累计记分详情查询在那里查? 浙江省衢州市驾驶证扣分查询的网页 衢州交通违章兰溪可以处理吗? 牛肉汤面条可以放鸡蛋吗? 浙江衢州车管所电话号码 牛肉汤可以蒸鸡蛋给宝宝吃吗 做法,牛肉汤卤蛋怎么做好吃,牛肉汤卤蛋的家常做法 牛肉汤能不能跟鸡蛋一起吃 帮查下车辆违规信息'自己不知道那里查 炖牛肉可以放冰糖和鸡蛋吗' 牛肉汤卤蛋的家常做法 牛肉和生鸡蛋一起吃吗? 牛肉汤煮鸡蛋可不可以吃 牛肉汤和鸡蛋煎饼能不能一起吃? 牛肉汤卤蛋的做法,牛肉汤卤蛋怎么做好吃,牛肉 牛肉汤煮鸡蛋面能吃吗。还有喝红酒吗 煮面条的时候,牛肉和鸡蛋能不能一起放?! 蒲公英和灵芝泡水有什么功效? 蒲公英根能和灵芝一起泡水吗?