java四种方法的引用_java的四种引用的理解

弱引用, WeakReference当一个对象只用弱引用的时候, 收集器发现它了就会回收它, 没发现就是还能够使用的web

软引用, SoftReference 当内存不足的时候, 在进行fullGC以前会回收软引用, 因此使用用来做为缓存缓存

虚引用 PhantomReference 这个引用丝绝不会影响它的回收,虚引用主要用来跟踪对象被垃圾回收器回收的活动svg

finalize的方法的调用过程,线程

当Minor GC 回收时候, 如对象没有实现finalize方法, 就直接回收, 若是实现了, 就会把这个对象放入到finalize Quenu中. Minor GC线程不会执行finalize方法的

MinorGC结束, 主线程运行, finalize 执行线程也开始挨个执行finalize方法.

下次执行MinorGC的时候, 发现这个对象的finalize已经执行完了, 就会直接回收

finalize的方法会存在与两次的回收过程当中, 因此不推荐使用这个方法, 还有finalize方法永远只是执行一次,翻译

虚引用: 当对象被销毁后会把他的引用放入一个引用队列中, 系统能够监控这个队列, 从而来监控那些对象的销毁code

引用队列(ReferenceQueue)

效果:引用队列能够配合软引用、弱引用及幽灵引用使用,当引用的对象将要被JVM回收时,会将其加入到引用队列中。xml

应用:经过引用队列能够了解JVM垃圾回收状况。对象

// 引用队列

ReferenceQueue rq = new ReferenceQueue();

// 软引用

SoftReference sr = new SoftReference(new String("Soft"),rq);

// 弱引用

WeakReference wr = new WeakReference(new String("Weak"),rq);

// 幽灵引用

PhantomReference pr = new PhantomReference(new String("Phantom"),rq);

// 从引用队列中弹出一个对象引用

Reference extends String> ref = rq.poll();

ReferenceQueue和Reference队列

ReferenceQueue含义及做用

一般咱们将其ReferenceQueue翻译为引用队列,换言之就是存放引用的队列,保存的是Reference对象。其做用在于Reference对象所引用的对象被GC回收时,该Reference对象将会被加入引用队列中(ReferenceQueue)的队列末尾。内存

ReferenceQueue经常使用的方法:

public Reference poll():从队列中取出一个元素,队列为空则返回null;

public Reference remove():从队列中出对一个元素,若没有则阻塞至有可出队元素;

public Reference remove(long timeout):从队列中出对一个元素,若没有则阻塞至有可出对元素或阻塞至超过timeout毫秒;

见以下代码:

ReferenceQueue< Person> rq=new ReferenceQueue();

Person person=new Person();

SoftReference sr=new SoftReference(person,rq);

这段代码中,对于Person对象有两种引用类型,一是person的强引用,而是sr的软引用。sr强引用了SoftReference对象,该对象软引用了Person对象。当person被回收时,sr所强引用的对象将会被放到rq的队列末尾。利用ReferenceQueue能够清除失去了软引用对象的SoftReference,以下操做:

SoftReference ref=null;

while((ref=(Person)rq.poll())!=null){

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值