java中的引用

引用分类

  • 强引用

    • 强引用是我们常见的普通对象引用,只有还有强引用指向一个对象,就表明这个对象还“存活”,垃圾收集器不会碰这个对象
    • 当一个对象被强引用对象引用时,它就处于 可达状态,它是不能被垃圾回收的,即使出现了OOM也不会对该对象回收
  • 软引用

    • 软引用是相对于强引用弱化了一些的引用
      • 当系统内存充足时, 它不会被回收
      • 当系统内存不足时, 会被回收
    • 借助java.lang.ref.SoftReference类来实现
      SoftReference<MyObject> softReference = new SoftReference<>(new MyObject());
      
  • 弱引用

    • 只要gc了,无论内存是否充足,都会被回收
    • 借助java.lang.ref.WeakReference类来实现
      WeakReference<MyObject> weakReference = new WeakReference<>(new MyObject());
      
  • 虚引用

    • 虚引用不会决定对象的生命周期, 如果一个对象仅仅持有虚引用,那么它和没有任何引用一样,在任何时候都可能被回收,他不能单独使用,虚引用必须搭配 引用队列—ReferenceQueue 联合使用
    • 主要作用是跟踪对象被垃圾回收的状态, 仅仅是提供了一种确保对象被finalize以后,做某些事情的通知机制
    • 借助java.lang.ref.PhantomReference类来实现
posted @ 2023-04-08 14:09  李勇888  阅读(16)  评论(0编辑  收藏  举报