/**
* Date: 2021/5/21 15:07
* 虚引用:
* java 提供了4种引用类型,在垃圾回收的时候,都有自己各自的特点
* ReferenceQueue是用来配合引用工作的,没有ReferenceQueue一样可以运行
*
* 创建引用的时候可以指定关联的队列,当GC释放对象内存的时候,会将引用加入到引用队列
* 如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的的行动
* 这相当于是一种通知机制
*
* 当关联的引用队列中有数据的时候,意味着引用指向的堆内存中对象被回收。通过这种方式,JVM允许我们在对象被销毁后做一些我们自己想做的事情
*/
public class PhantomReferenceDemo {
public static void main(String[] args) throws InterruptedException {
Object o1 = new Object();
ReferenceQueue<Object> referenceQueue = new ReferenceQueue<>();
PhantomReference<Object> phantomReference = new PhantomReference<>(o1, referenceQueue);
System.out.println(o1);
System.out.println(phantomReference .get());
System.out.println(referenceQueue.poll());
System.out.println("===============================");
o1 = null;
System.gc();
Thread.sleep(500); // 保证一定被GC
System.out.println(o1);
System.out.println(phantomReference .get());
System.out.println(referenceQueue.poll()); // GC前会将引用放入队列
}
}
虚引用 PhantomReference
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 强引用:平时我们所使用的大部分引用都是强引用。一个对象具有强引用,类似于不可缺少的生活品。JVM在内 存不足的时候...
- 强弱软虚引用 强引用 强引用就是程序中一般使用的引用类型,强引用的对象是可触及的,不会被回收。相对的,软引用、弱引...
- 背景 我之前一直认为自己还是比较了解Java中的四种引用的,直到前段时间有同事排查young gc问题,把一个本地...
- 简单谈谈引用(摘自java虚拟机第二版 )署名:逆水 四种引用引用介绍及回收时机 一、四种引用在JDK 1.2之后...
- 今天青石的票圈出镜率最高的,莫过于张艺谋的新片终于定档了。 一张满溢着水墨风的海报一次次的出现在票圈里,也就是老谋...