java中的四种引用类型

java中的引用类型

对象引用的强度比较

强引用(Strong Reference)> 软引用(Soft Reference)> 弱引用(Weak Reference)> 虚引用(Phantom Reference)

  • Strong Reference :所谓强引用,就是我们最常见的普通对象引用,只要还有一个强引用指向对象,就表名对象还活着,立即回收器就不会去染指。对于一个普通对象,如果没有其它引用关系,只要超过了引用的作用域或者显式的将相应的强引用赋值为null,就可以被垃圾回收器进行回收了,当然具体还是要看垃圾收集策略。注意:只要强引用还存在,jvm宁愿抛出OutOfMemoryError 也不会去进行回收
  • Soft Reference :软引用就是相对强引用弱化一点的引用,只有当jvm认为内存不足时,才会试图去回收软引用指向的对象,jvm会在确保抛出OutOfMemoryError 之前清理软引用对象。软引用通常用来实现内存敏感的缓存,如果还有空闲内存,就可以暂时保留缓存,让程序更有效率的运行,当内存不足时就清理掉,这就在保证了使用缓存的同时不会因为缓存而耗尽内存。
  • Weak Reference : 弱引用仅仅是提供一种访问在弱引用的状态下对象的途径。这就可以用来构建一种没有特定约束的关系,比如维护一种非强制性的映射关系,如果试图获取时该对象还存在,就使用它,否则就重新实例化。弱引用同样也是很多缓存实现的选择。注意:一个对象只有弱引用指向它的时候,它是可以被回收的
  • Phantom Reference :虚引用也可被叫做幻像引用,就像形同虚设一样。你不能通过它访问对象。它仅仅是提供一种确保对象被finalize以后要做某些事情的机制。比如,通常用来做所谓的Post-Mortem清理机制,可以利用虚引用监控对象的创建和销毁。注意虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

四种引用状态的比较:

引用类型被垃圾回收时间用途生存时间
强引用从来不会对象的一般状态JVM停止运行时终止
软引用当内存不足时对象缓存内存不足时终止
弱引用正常垃圾回收时对象缓存垃圾回收后终止
虚引用正常垃圾回收时跟踪对象的垃圾回收垃圾回收后终止
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值