简述java强引用,软引用,弱引用

gc回收内存:

obj = null;

System.gc();

 

1.强引用:

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存不足,虚拟机宁愿程序抛出OutOfMemoryError是程序异常终止也不会回收强引用对象。

Object o = new Object();//强引用

在ArrayList中,利用循环将数组全部置空而不是直接将数组引用置空,可以保留强引用ArrayList的空间

public void clear() { modCount++; // Let gc do its work for (int i = 0; i < size; i++) elementData[i] = null; size = 0; }

 

2.软引用:

内存空间足够时,不回收。内存空间不足时将被GC回收。适合用来实现内存敏感的高速缓存。

String str=new String("abc"); // 强引用 SoftReference<String> softRef=new SoftReference<String>(str); // 软引用

实际应用:在浏览器中,按后退返回上个浏览网页。重新请求还是直接从内存获取?

如果浏览结束就直接回收,则需要重新请求

如果存储在内存中,返回时到内存拿取,会造成内存大量浪费,甚至内存溢出,这时就可以采用软引用

Browser prev = new Browser(); // 获取页面进行浏览 SoftReference sr = new SoftReference(prev); // 浏览完毕后置为软引用 if(sr.get()!=null){ rev = (Browser) sr.get(); // 还没有被回收器回收,直接获取 }else{ prev = new Browser(); // 由于内存吃紧,所以对软引用的对象回收了 sr = new SoftReference(prev); // 重新构建 }

 

3.弱引用:

只具有弱引用的对象生命周期更短暂。垃圾回收器线程扫描管辖区域时,若发现弱引用对象,不管内存是否充足,都会回收它的内存。 WeakReference<String> abcWeakRef = new WeakReference<String>(str);//弱引用 str=null;

将弱引用变为强引用:String abc = abcWeakRef.get();

适用于:这个对象只是偶尔使用,并希望在使用时岁时能获取到,但又不影响此对象的垃圾收集。于是用WeakReference来记住此对象。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值