java soft reference_在Java中,SoftReference和WeakReference有什么区别?

原则: weak reference与垃圾收集相关。通常,具有一个或多个对象的对象。reference将不符合垃圾收集的条件。

上述原则不适用于下列情况:weak reference..如果一个对象与其他对象只有弱引用,那么它就可以进行垃圾回收了。

让我们看看下面的例子:我们有一个Map使用键是引用对象的对象。import java.util.HashMap;   public class Test {

public static void main(String args[]) {

HashMap aMap = new

HashMap();

Employee emp = new Employee("Vinoth");

EmployeeVal val = new EmployeeVal("Programmer");

aMap.put(emp, val);

emp = null;

System.gc();

System.out.println("Size of Map" + aMap.size());

}}

现在,在程序的执行过程中emp  = null..这个Map在这里握着钥匙是没有意义的null..在上述情况下,对象不是垃圾收集。

WeakHashMap

WeakHashMap是条目(key-to-value mappings)不再可能从Map.

让我展示上面的例子WeakHashMapimport java.util.WeakHashMap;public class Test {

public static void main(String args[]) {

WeakHashMap aMap =

new WeakHashMap();

Employee emp = new Employee("Vinoth");

EmployeeVal val = new EmployeeVal("Programmer");

aMap.put(emp, val);

emp = null;

System.gc();

int count = 0;

while (0 != aMap.size()) {

++count;

System.gc();

}

System.out.println("Took " + count                + " calls to System.gc() to result in weakHashMap size of : "

+ aMap.size());

}}

产出:拿20 calls to System.gc()导致aMap size编号:0。

WeakHashMap只有对键的弱引用,而不像其他引用那样具有强引用。Map上课。有些情况下,当值或键被强烈引用时,您必须小心,尽管您已经使用了WeakHashMap..通过将对象包装在WeakReference.import java.lang.ref.WeakReference;import java.util.HashMap;public class Test {

public static void main(String args[]) {

HashMap map =

new HashMap();

WeakReference> aMap =

new WeakReference>(

map);

map = null;

while (null != aMap.get()) {

aMap.get().put(new Employee("Vinoth"),

new EmployeeVal("Programmer"));

System.out.println("Size of aMap " + aMap.get().size());

System.gc();

}

System.out.println("Its garbage collected");

}}

软引用。

Soft Reference是稍强一点的弱引用。软引用允许垃圾收集,但只有在没有其他选项的情况下,才会请求垃圾收集器清除它。

垃圾收集器不像对弱可达对象那样积极地收集软可达对象,而是只在真正“需要”内存时收集软可达对象。软引用是对垃圾收集器说的一种方式,“只要内存不太紧,我想把这个对象留在身边。但是如果内存真的很紧,就去收集它,我会处理的。”垃圾收集器需要清除所有软引用,然后才能抛出OutOfMemoryError.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值