SoftReference amp; WeakReference

2023-11-08 15:58

本文主要是介绍SoftReference amp; WeakReference,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集的执行绪清除,你必须要用一个 reference 记住此对象,以便随时观察,但是却因此造成此对象的 reference 数目一直无法为零, 使得对象无法被清除。

 java.lang.ref.WeakReference

  不过,现在有了 Weak Reference 之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference

  A obj = new A();

    WeakReference wr = new WeakReference(obj);
  
  ...

  if (wr.get()==null) {
  
  
  System.out.println("obj 已经被清除了 ");
  
  
  } else {
  
  System.out.println("obj 尚未被清除,其信息是 "+obj.toString());
  
  }
  
  ...
  在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果传出值为 null 的话,代表此对象已经被清除。

  这类的技巧,在设计 Optimizer Debugger 这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以 影响此对象的垃圾收集。

  java.lang.ref.SoftReference

  Soft Reference 虽然和 Weak Reference 很类似,但是用途却不同。 被 Soft Reference 指到的对象,即使没有任何 Direct Reference,也不会被清除。一直要到 JVM 内存不足时且 没有 Direct Reference 时才会清除,SoftReference 是用来设计 object-cache 之用的。如此一来 SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误 (OutOfMemoryError)。我觉得 Soft Reference 也适合拿来实作 pooling 的技巧。

 

    A obj = new A();

    SoftRefenrence sr = new SoftReference(obj);

 

    引用时

    if(sr!=null){

        obj = sr.get();

    }else{

        obj = new A();

        sr = new SoftReference(obj);

    }

  

这篇关于SoftReference amp; WeakReference的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/370928

相关文章

Linux - 压缩amp;amp;解压缩命令详解

linux zip命令 1.zip命令  zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.  zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip unzip -o -d /home/sunny

PHP引用(amp;)使用详解【转】

官方文档: 1.引用是什么:http://www.php.net/manual/zh/language.references.whatare.php 2.引用做什么: http://www.php.net/manual/zh/language.references.whatdo.php 3.引用传递: http://www.php.net/manual/zh/language.refer

windows C++ 并行编程-C++ AMP 图形(二)

文中的"显存"还没有找到合适的中文翻译,它的英文名称是texture, 在应用开发者来看,texture是一个名词,在物理上指的是 GPU显存中一段连续的空间。 读取显存对象 可以使用 texture::operator[]、texture::operator() 运算符或 texture::get 方法从 texture 对象中读取。 两个运算符将返回一个值,而不是引用。 因此,你不能使用

Cygwinnbsp;amp;nbsp;Gitnbsp;中文支持

原文地址:Cygwin & Git 中文支持 作者:CICO李依洁 1.在下面的文件末尾添加一行。 C:cygwinhomecico.bash_profile export LESSCHARSET=latin1 ps:控制源代码(例如java文件)在Cygwin界面输出时,不做特殊处理(不要用UTF-8的规则将字节拼成字,utf-8用三个字节解释汉字,GBK用两个字节)。 2.打

HashTable amp;amp; HashMap

HashTable && HashMap HashTable:散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。时间复杂度为O(1)。 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进

Listview 软引用SoftReference异步加载图片

原文地址:http://www.2cto.com/kf/201207/139035.html HashMap<String, SoftReference<Drawable>> imageCache 关于SoftReference这个类多少知道些机制,会用就ok了。     机制:简单来说,她会帮助我们管理内存,防止内存溢出,另外一点也就相当于map,临时缓存些图片drawable让我们

JAVA中Action层,nbsp;Service层amp;n…

modle层就是对应的数据库表的实体类。Dao层是使用了Mybatis连接数据库、操作数据库(增删改查)。Service层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断)。Action层:引用对应的Service层,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理。以上的Mybatis,Struts,都需要注入到

linux下打开tomcat时报错ERROR:amp;nb…

完整报错如下: ERROR: transport error 202: gethostbyname: unknown host  ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transpo

python matlotlib amp; 提取字符串中的中文

(1)python matlotlib 当连续做多张图时出现之前做的折线图均出现在最新的一张图上 此时需要加一条语句: plt.figure() 该句可以准备新的图板。。。 # 可视化mpl.rcParams['font.sans-serif'] = ['SimHei']mpl.rcParams['axes.unicode_minus'] = Falseplt.figure()#

什么是Google AMP

谷歌AMP应用于WordPress网站:AMP是什么 我们可能已经发现,在智能手机上阅读一些网页内容有的时候加载很快,但有的时候加载很慢,甚至是无穷无尽等待的。幸运的是,谷歌提供了自己的解决方案,那就是在2016年2月底推出的加速移动页面(AMP)项目,谷歌希望加快手机网页的加载时间,从而提高移动用户的阅读舒适度。 什么是谷歌AMP,直观的说法就是加速移动页,是由谷歌提供的一个开源项目