关于WeakReference被回收的时机

上一篇我讲到了关于SoftReference在什么情况下会被垃圾回收器所回收,这一篇我将用代码来验证WeakReference在什么情况下会被垃圾回收器所回收,究竟是在FULL GC的时候被清除还是在GC的时候被清除。
直接上代码:

public class WeakReferenceTest {
	public static void main(String[] args) {
		WeakReference<Object> weakReference=new WeakReference<Object>(new Object());
		System.out.println("beforeGC:"+weakReference.get());
		List<Byte[]> list=new ArrayList<>();
		for(int i=0;i<100;i++){
			list.add(new Byte[1024]);
		}
		System.out.println("afterGC:"+weakReference.get());
	}
}

JVM参数:

-verbose:gc -Xmx5m

运行代码可以在控制台看到下面的信息:

beforeGC:java.lang.Object@6d06d69c
[GC (Allocation Failure)  1024K->980K(5632K), 0.0015905 secs]
afterGC:null

从控制台打印信息的第一行和第三行可以看出,在GC之前该对象是能够获取到的,在GC之后该对象就已经被垃圾回收器所回收。
结论:
1.只要发生了GC,WeakReference就会被垃圾回收器所回收
2.一般用weak reference作为缓存,该缓存对象应当是有价值的, 而且很容易被重新被构建, 且很消耗内存的对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值