美文网首页
Java-引用类型

Java-引用类型

作者: 有腹肌的豌豆Z | 来源:发表于2020-09-03 10:41 被阅读0次
  • JDK1.2 之前,一个对象只有“已被引用”和"未被引用"两种状态,这将无法描述某些特殊情况下的对象,比如,当内存充足时需要保留,而内存紧张时才需要被抛弃的一类对象。
  • 所以在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱。

引用与对象

  • 每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。
    在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。
//创建一个引用,引用可以独立存在,并不一定需要与一个对象关联
String s;
  • 通过将这个叫“引用”的标识符指向某个对象,之后便可以通过这个引用来实现操作对象了。
String str = new String("abc");
System.out.println(str.toString());

一、强引用

  • Java中默认声明的就是强引用,比如:
Object obj = new Object(); //只要obj还指向Object对象,Object对象就不会被回收
obj = null;  //手动置null
  • 只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了。

二、软引用

  • 软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等。
  • 在 JDK1.2 之后,用java.lang.ref.SoftReference类来表示软引用。

三、弱引用

  • 弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。
  • 在 JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用。

四、虚引用

  • 虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。

五、引用队列(ReferenceQueue)

  • 引用队列可以与软引用、弱引用以及虚引用一起配合使用,当垃圾回收器准备回收一个对象时,如果发现它还有引用,那么就会在回收对象之前,把这个引用加入到与之关联的引用队列中去。程序可以通过判断引用队列中是否已经加入了引用,来判断被引用的对象是否将要被垃圾回收,这样就可以在对象被回收之前采取一些必要的措施。
  • 与软引用、弱引用不同,虚引用必须和引用队列一起使用。

相关文章

  • Java- 一维数组:

    Java- 一维数组: 使用语法 elementType[] arrayRefVar(元素类型[] 数组引用变量)...

  • Java-引用类型

    JDK1.2 之前,一个对象只有“已被引用”和"未被引用"两种状态,这将无法描述某些特殊情况下的对象,比如,当内存...

  • JAVA-引用类型

    JAVA有5中引用类型,strong,soft, weak,phantom,final 强引用: 最常用的引用,我...

  • JAVA-并发编程(一)

    JAVA-并发编程(一) sschrodinger 2018/11/28 引用 《Java 并发编程的艺术》 方腾...

  • JAVA-并发编程(二)

    JAVA-并发编程(二) sschrodinger 2019/05/14 引用 《Java 并发编程的艺术》 方腾...

  • JavaScript基础三

    1、引用类型有哪些?非引用类型有哪些 引用类型:Object非引用类型:number string null ...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • 引用类型与对象拷贝

    1.引用类型有哪些?非引用类型有哪些 引用类型: 对象 object 数组 函数 正则非引用类型...

  • 引用类型对象拷贝思考

    1、引用类型有哪些?非引用类型有哪些 非引用类型 String 类型、Null 类型、Number 类型、Unde...

  • js-引用类型对象拷贝

    1.引用类型; 2.过滤数组; 3.深浅拷贝方法; 1.引用类型有哪些?非引用类型有哪些 引用类型:引用类型(Ob...

网友评论

      本文标题:Java-引用类型

      本文链接:https://www.haomeiwen.com/subject/aufxsktx.html