美文网首页
java四大引用

java四大引用

作者: 饭勺 | 来源:发表于2021-03-16 10:07 被阅读0次

    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

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

    相关文章

      网友评论

          本文标题:java四大引用

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