四种引用关系笔记(强、软、弱、虚)

1.一个对象可以有多种引用等级,但取最高级生效,且不同的引用等级之间,可以相互切换。GC机制只关心其最高等级。(强>软>弱>虚)。强引用对象哪怕内存不够 他也不会进行回收。

2.匿名对象的等级默认是弱引用,只要执行GC就会被回收~

3.定义在方法中、循环中的对象 一般为弱引用 ,GC扫到就回收。

4.软引用对象实现两种方式 ,一个强引用声明对象,传入SoftRefernce的构造函数中,使用的话调用reference.get获取使用。或者匿名构造对象传入SoftRefernce的构造函数中。前者传入之后还得取消强引用,即声明变量名=null,该操作是将对象变为弱引用,但弱<软 所以该对象生效的是软引用。第二种方式匿名的本来为弱引用,包装后按软引用处理,自动升级。

5.软引用对象在内存不够时候被GC扫到 ,他就被回收了,不然不会被回收的。

6.在开发中大部分对象都是弱引用。

7.可以把XXXReference理解为对象的包装类,理解起来容易的多。

8.虚引用的话可以理解为在弱引用的基础上加了一个监听器 ,用来监听对象是否被回收的,PhantomReference的使用需要搭配ReferenceQueue使用,就是构造方法里加一个ReferenceQueue对象,具体使用不知道有啥子用,没太弄明白。。。

9.自己测试几种引用的时候自定义一个对象 ,重写里面的finalize方法,调用Runtime.getRuntime.gc,或者System.gc手动进行垃圾回收进行测试。注意一个小问题就是GC线程是一个守护线程 ,主线程结束他不管任务有没有完成,他都会结束,所以可能main方法跑完了看不到效果,建议main方法里加一个while(true)进行测试。保证GC操作能执行。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值