美文网首页
java四种引用类型

java四种引用类型

作者: bear_small | 来源:发表于2020-08-10 18:27 被阅读0次

java中得四种引用

Java中有四种引用类型:强引用、软引用、弱引用、虚引用

  • 强引用
    我们代码中常写,如: Object() obj = new Object();
    强引用对象永远不会被JVM回收,即使最终OOM,可手动中断,将其致为null,对象则被回收,可通过重写finalize方法验证,实际开发中,一定不要重写finalize方法
  • 软引用
    创建一个软引用
    SoftReference<Demo> demoSoftReference = new SoftReference<Demo>(new Demo());
    软引用通过SoftReference进行申明,通过泛型将对象包裹,当我们需要从软引用对象获取泛型对象时,通过get进行获取。
    Demo demo = demoSoftReference .get();
    为什么会有软引用呢?
    我们先从它得特点谈一谈,程序在运行内存不足时,会触发JVM得GC操作,如果GC过后,内存依旧不足,怎么办呢?此时JVM就会把软引用中得对象kill掉(内存不足,JVM才会回收此类对象,内存足够得情况下,手动GC也不会进行该对象的回收操作),发挥你的想象,是不是想到了什么有趣得场景(项目内部缓存)呢!
  • 弱引用
    弱引用的使用和软引用类似,关键字变成了WeakReference
    WeakReference<Demo> weakReference = new WeakReference<Demo>(new Demo());
    特点是不管内存是否足够,只要发生GC,就会被回收,如果想了解相关用法可看一下ThreadLocal的源码
  • 虚引用
ReferenceQueue queue = new ReferenceQueue();
PhantomReference<Demo> reference = new PhantomReference<Demo>(new Demo(), queue);

当发生GC操作,GC准备回收某个对象时,如果发现该对象有虚引用,就会在回收前,把这个虚引用加入到与之关联的ReferenceQueue中,通过ReferenceQueue获取进行其他操作
无法通过虚引用来获取一个对象的真实引用(直接返回null),可见PhantomReference的get方法:

public T get() {        
  return null;
}

关于操作用法可关注下NIO,使用虚引用管理堆外内存

相关文章

网友评论

      本文标题:java四种引用类型

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