首页 > 编程语言 > 详细

Java的四种引用:强引用、软引用,弱引用和虚引用

时间:2020-07-12 21:10:04      阅读:94      评论:0      收藏:0      [点我收藏+]

强引用

在Java中使用如下方式声明的引用是强引用

String str = new String("abc");
str 是堆中对象new String("abc")的强引用,被强引用的对象在任何时候gc不会被回收,即使内存不足汇报OOM。

技术分享图片

软引用

 在Java中使用如下方式声明的引用是软引用

SoftReference<Car> b = new SoftReference<>(new Car("bcd", 1));

软引用对象在内存不足gc时会被回收

弱引用

在Java中使用如下方式声明的引用是弱引用

WeakReference<Car> a = new WeakReference<>(new Car("abc", 1));
System.out.println(a.get());
System.gc();
System.out.println(a.get());

a是堆中对象new Car("abc", 1)的弱引用,弱引用在gc时会被回收。上面的代码输出:

技术分享图片

 

 

 

如果一个对象既被强引用又被弱引用,那么就按强引用来

技术分享图片

 

 

虚引用

在Java中使用如下方式声明的引用是虚引用

String str = new String("abc");
ReferenceQueue queue = new ReferenceQueue();
PhantomReference pr = new PhantomReference(str, queue);
System.out.println(pr.isEnqueued());
str = null;//切断引用
System.gc();//回收
while (true){
  boolean flag=pr.isEnqueued();
  if(flag){
     System.out.println("已被回收");
     break;
  }else {
  System.out.println("未被回收");
  }
}

虚引用每次get的时候都是null,虚引用不破坏原来对象的生命周期如同空气,使用方法需要配合ReferenceQueue使用。对象在被gc后,引用对象被加入到ReferenceQueue。可以使用虚引用来判断对象是否被回收。

技术分享图片

 

Java的四种引用:强引用、软引用,弱引用和虚引用

原文:https://www.cnblogs.com/billshen/p/13289677.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!