美文网首页
JAVA-引用类型

JAVA-引用类型

作者: AlanSun2 | 来源:发表于2019-09-19 17:50 被阅读0次

JAVA有5中引用类型,strong,soft, weak,phantom,final

  1. 强引用: 最常用的引用,我们平常写的 XXX xxx = new XXX,没有引用时回收
  2. SoftReference:如果一个对象只剩下一个soft引用,在jvm内存不足的时候会将这个对象进行回收。队列中的 PhantomReference 的 referent 为空。回收之后放入队列
  3. WeakReference:如果对象只剩下一个weak引用,那gc的时候就会回收。官方说时用在规范化mapping。例如 WeakHashMap。队列中的 PhantomReference 的 referent 为空。回收之后放入队列
  4. PhantomReference(虚引用):就像它的名字一样形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。gc时发送通知然后回收,主要用来在回收时处理一些逻辑,比如 Cleaner。队列中的 PhantomReference 的 referent 不为空。回收之前放入队列
  5. FinalReference (Finalizer):当重写 Object 的finalize() 方法后 JVM 会给该类添加 finalizer 标记,同时生成一个 FinalReference。主要用来调用 finalize() 方法,通过使用低优先级的守护线程实现对 finalize() 的调用,该类被回收至少需要经过2次GC,第一次是将 FinalReference 放入ReferenceQueue 供 Finalizer 的守护线程使用(即调用 finalize()),第二次才能被回收。这里有个问题就是 Finalizer 的 守护线程不知道什么时候会被调用,所以这些对象可能一直会被回收,导致oom

SoftReference和WeakReference 都可以用来做缓存,只是生命周期不一样。

参考:
https://www.infoq.cn/article/jvm-source-code-analysis-finalreference/
https://www.jianshu.com/p/e66930caca9c
https://www.jianshu.com/p/fdd4c16601f9

相关文章

  • 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/exycuctx.html