强引用
Object o = new Object();
o = null;
软引用
//设置最大堆内存为:-Xmx15M
//直接声明的对象是强引用,软引用必须通过SoftReference对象。SoftReference对象在内存中时软引用
SoftReference<byte[]> m = new SoftReference<>(new byte[1024 * 1024 * 10]);
//获取软引用的对象
System.out.println(m.get());
//执行垃圾回收
System.gc();
//暂停500毫秒,留给垃圾回收一点时间
Thread.sleep(500);
//再次输出一下数据,看是否被回收
System.out.println(m.get());
//再使用6m的堆内存,此时堆空间不足,会触发GC
byte[] temp = new byte[1024 * 1024 * 6];
//获取不到数据:null
System.out.println(m.get());
弱引用
无论内存是否足够,只要JVM开始垃圾回收,弱引用关联的对象都会被回收。(画外音:不能存在强引用可达)
//定义的buff是强引用
byte[] buff = new byte[1024 * 1024 * 10];
//定义弱引用
WeakReference<byte[]> weakReference = new WeakReference<>(buff);
//触发一次GC
System.gc();
Thread.sleep(500);
//此时还可以获取到弱引用的对象
System.out.println(weakReference.get());
//准备回收str对象
buff = null;
byte[] buff2 = new byte[1024 * 1024 * 10];
System.out.println(weakReference.get());
输出:
[B@1b6d3586
null
虚引用


原文始发于微信公众号(Java不惑):Java中的引用类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/24520.html