篆体字作品 | 篆体字知识 | 加入收藏 篆体字转换器软件可转换多种篆体字在线预览 网页版 V2.0
篆体字转换器

当前位置:篆体字网 > 知识库 >

softreference

时间:2023-12-31 03:34:57 编辑:篆字君 来源:篆体字网

SoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的程序中将某些大型数据设置成SoftReference再合适不过了。

创建一个SoftReference:

Java代码

Object obj = new Object(); SoftReference softRef = new SoftReference(obj); obj = null;

Object obj=new Object(); SoftReference softRef=new SoftReference(obj); obj=null;

最后那句“obj=null”很重要。如果不将obj设置成null,那么new出来的Object就会有一个"strong reference",如果这样,softRef就不能发挥作用了。

使用SoftReferene:

Java代码

Object obj2; obj2 = sr.get(); if (obj2 == null) // GC freed this sr = new SoftReference(obj2 = new Object());

Object obj2; obj2=sr.get(); if (obj2==null) // GC freed this sr=new SoftReference(obj2=new Object());

因为是SoftReference,所以有可能已经被GC回收了,所以需要判断sr.get()的返回值是否为null。如果是的话,就再重新new一个Object。这里的最后一行代码也很有讲究,比如,也许会这么写:

Java代码

Object obj2; obj2 = sr.get(); if (obj2 == null) { sr = new SoftReference(new Object()); obj2 = sr.get(); }

Object obj2; obj2=sr.get(); if (obj2==null) { sr=new SoftReference(new Object()); obj2=sr.get(); }

这样的问题就在于GC可能发生在"sr=new SoftReference(new Object());"和"obj2=sr.get()"之间,那么obj2仍然有可能为null。

Copyright:2021-2023 篆体字转换器 www.dddtedu.com All rights reserved.