java四大引用

1.强引用

一般的Object obj = new Object() ,就属于强引用。在任何情况下,只要有强引用关联(与根可达)还在,垃圾回收器就永远不会回收掉被引用的对象。
根可达:根节点可达。
根节点有哪些

a.虚拟机栈(栈帧中的本地变量表)中引用的对象。

b.方法区中类静态属性引用的对象。

c. 方法区中常量引用的对象。

d.本地方法栈中JNI(即一般说的Native方法)引用的对象。

e. JVM的内部引用(class对象、异常对象NullPointException、OutofMemoryError,系统类加载器)。

f. 所有被同步锁(synchronized关键)持有的对象。

g. JVM内部的JMXBean、JVMTI中注册的回调、本地代码缓存等

h.JVM实现中的“临时性”对象,跨代引用的对象(在使用分代模型回收只回收部分代时)。

2.软引用SoftReference

一些有用但是并非必需,用软引用关联的对象,系统将要发生内存溢出(OuyOfMemory)之前,这些对象就会被回收(如果这次回收后还是没有足够的空间,才会抛出内存溢出)。

3.弱引用WeakReference

一些有用(程度比软引用更低)但是并非必需,用弱引用关联的对象,只能生存到下一次垃圾回收之前,GC发生时,不管内存够不够,都会被回收。比如ThreadLocal、WeakHashMap的使用。一般弱引用比软引用用得多。

4.虚引用PhantomReference

幽灵引用,最弱(随时会被回收掉)。垃圾回收的时候收到一个通知,就是为了监控垃圾回收器是否正常工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从 JDK1.2 版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低...
    flynnny阅读 1,490评论 0 0
  • 强引用、软引用、弱引用和虚引用 四种应用区别在于体现对象不同的可达性状态,进而影响到GC。 一、可达性状态----...
    Joe_blake阅读 3,203评论 0 1
  • 从 JDK1.2 版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低...
    小呀么小黄鸡阅读 1,576评论 0 0
  • 1.强引用 2.软引用 描述:    一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了...
    wang6771264阅读 4,525评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,602评论 0 11

友情链接更多精彩内容