b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

weakreference java内存泄露分析,java弱引用(weakreferen(3)

电脑杂谈  发布时间:2017-05-27 23:01:53  来源:网络整理

弱引用(WeakReference )

WeakReference 类的一个典型用途就是规范化映射( canonicalized mapping )。另外,对于那些生存期相对较长而且重新创建的开销也不高的对象来说,弱引用也比较有用。关键之处在于,垃圾收集器运行时如果碰到了弱可及对象,将释放WeakReference引用的对象。然而,请注意,垃圾收集器可能要运行多次才能找到并释放弱可及对象。

虚引用(PhantomReference )

PhantomReference 类只能用于跟踪对被引用对象即将进行的收集。同样,它还能用于执行pre-mortem清除操作。 PhantomReference必须与ReferenceQueue类一起使用。需要ReferenceQueue是因为它能够充当通知机制。当垃圾收集器确定了某个对象是虚可及对象时, PhantomReference对象就被放在它的ReferenceQueue上。将PhantomReference对象放在ReferenceQueue上也就是一个通知,表明PhantomReference对象引用的对象已经结束,可供收集了。这使您能够刚好在对象占用的内存被回收之前采取行动。 Reference与 ReferenceQueue 的配合使用。

GC、 Reference 与 ReferenceQueue 的交互

A、GC无法删除存在强引用的对象的内存。

B、GC发现一个只有软引用的对象内存,那么:

①SoftReference对象的 referent域被设置为 null ,从而使该对象不再引用 heap 对象。

②SoftReference引用过的 heap 对象被声明为 finalizable。

③当 heap对象的finalize()方法被运行而且该对象占用的内存被释放, SoftReference对象就被添加到它的ReferenceQueue (如果后者存在的话)。

C、GC发现一个只有弱引用的对象内存,那么:

①WeakReference对象的 referent 域被设置为 null,从而使该对象不再引用heap 对象。

②WeakReference引用过的 heap 对象被声明为 finalizable 。

③当heap 对象的 finalize() 方法被运行而且该对象占用的内存被释放时, WeakReference 对象就被添加到它的 ReferenceQueue (如果后者存在的话)。

D、GC发现一个只有虚引用的对象内存,那么:

①PhantomReference引用过的 heap 对象被声明为 finalizable 。

②PhantomReference在堆对象被释放之前就被添加到它的 ReferenceQueue 。

得注意的地方有以下几点:

1、 GC 在一般情况下不会发现软引用的内存对象,只有在内存明显不足的时候才会发现并释放软引用对象的内存。

2、 GC 对弱引用的发现和释放也不是立即的,有时需要重复几次 GC ,才会发现并释放弱引用的内存对象。

3、软引用和弱引用在添加到 ReferenceQueue 的时候,其指向真实内存的引用已经被置为空了,相关的内存也已经被释放掉了。而虚引用在添加到 ReferenceQueue 的时候,内存还没有释放,仍然可以对其进行访问。

代码示例

通过以上的介绍,相信您对Java 的引用机制以及几种引用方式的异同已经有了一定了解。光是概念,可能过于抽象,下面我们通过一个例子来演示如何在代码中使用 Reference 机制。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49607-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 唐峰
      唐峰

      现在的喷气式飞机是当年螺旋桨可比的吗

    热点图片
    拼命载入中...