Java系列: 关于虚引用及其测试代码
2024-10-20 05:43:40
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中。
ReferenceQueue queue = new ReferenceQueue ();
PhantomReference pr = new PhantomReference (object, queue);
程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
测试代码如下:
public class App
{
public static void main( String[] args ) throws InterruptedException
{
Object obj = new Object();
ReferenceQueue queue = new ReferenceQueue ();
PhantomReference<Object> pf = new PhantomReference<Object>(obj, queue);
obj=null; while(true){
System.out.printf("pf.get() = %d, isEnqueued: %b\r\n", pf.get(), pf.isEnqueued());
if(pf.isEnqueued())
break;
System.gc();
Thread.sleep(1000);
}
}
}
输出结果:
pf.get()= null, isEnqueued: false
pf.get()= null, isEnqueued: true
最新文章
- MySQL索引背后的数据结构及算法原理【转】
- 有问题得就分享(此实现不是 Windows 平台 FIPS 验证的加密算法的一部分)
- Fiddler使用AutoResponder进行本地文件和线上文件的映射
- BuildingAssetBundles in 5.x
- ACM 寻找最大数
- kernel/Makefile
- -webkit-appearance: none;去处select默认小箭头样式
- UIControl-IOS开发
- java总结
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1
- scp免密码传送文件
- Android-Async-Http 特性简单分析
- ThinkPHP删除栏目(单)
- js制作列表滚动(有滚动条)
- python 函数运算先于单目运算
- Uploadify导致Chrome频繁崩溃Crash
- 算法(第4版) (Robert Sedgewick / Kevin Wayne 著)
- POJ:3083 Children of the Candy Corn(bfs+dfs)
- JQuery返回Json日期格式的問題
- poj1077