Java中的引用类型(强引用、软引用、弱引用、虚引用)

  1. 强引用
    是指创建一个对象并把这个对象赋给一个引用变量;
    强引用有引用变量指向时永远不会被垃圾回收,即使内存不足的时候。

2.软引用
软引用通过SoftReference类来实现
软引用的对象当系统内存充足时和强引用没有太多区别,但内存不足时会回收软引用的对象。

注:当系统内存充足时,系统不会进行软引用的内存回收, 当系统不足时将会回收软引用的对象。
当用 java -Xmx1m -Xms1m SoftReferenceTest 命令时强制堆内存为1m时 软引用引用对象将被回收。(可以创建10000个对象)

3.弱引用(weakReference)
弱引用通过weakReference类来实现
弱引用具有很强的不确定性。因为垃圾回收每次都会回收弱引用的对象。

4.虚引用

  • 软引用和弱引用可以单独使用,虚引用不能单独使用,虚引用的作用是就跟踪对象被垃圾回收的状态,程序可以通过检测与虚引用关联的虚引用队列是否已经包含了指定的虚引用,从而了解虚引用的对象是否即将被回收。

  • PhantomReference对象实现

  • 虚引用通过PhantomRefence类实现,它本身对对象没有影响,类似与没有应用,对象甚至感觉不到虚引用的存在,如果一个对象只有一个虚引用存在,那么他就类似没有应用存在。

  • 当程序强制垃圾回收后,只有虚引用引用字符串对象将会被垃圾回收,当被引用的对象被回收后,对应的引用将被添加到关联的引用队列中。

4.软引用
如果使用软引用,弱引用,虚引用的引用方式引用对象,垃圾回收就能够随意的释放这些对象,若果希望尽可能减小程序在起声明周期中所占用的内存大小,可以灵活使用这些引用。

如果使用了这些引用就不能保留这些对象的强引用(强制引用应该置null),否则就浪费了这些类提供的任何好处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值