美文网首页
Java中的四种引用

Java中的四种引用

作者: Drew_MyINTYRE | 来源:发表于2020-11-04 11:48 被阅读0次

Java中的四种引用

  • 强引用
public class Student {    @Override
    protected void finalize() throws Throwable {
        System.out.println("Student 被回收了");
    }
}

public static void main(String[] args) {
    Student student = new Student();
    student = null;
    System.gc();
}

打印结果:Student 被回收了

在实际开发中,千万不要重写finalize方法 !!!!

看到有一些对象被手动赋值为NULL,就是为了可以提醒JVM,这块资源可以进行回收了。

  • 软引用
 SoftReference<Student>studentSoftReference=new SoftReference<Student>(new Student());

 Student student = studentSoftReference.get();

软引用有什么特点呢?

当内存不足,会触发JVM的GC,如果GC后,内存还是不足,就会把软引用包裹的对象给干掉。

//定义了一个软引用对象,里面包裹了byte[],byte[]占用了10M,然后又创建了10Mbyte[]
//手动完成GC后,软引用对象包裹的byte[]还活的好好的,
//但是当我们创建了一个10M的byte[]后,最大堆内存不够了
//所以把软引用对象包裹的byte[]给干掉了,如果不干掉,就会抛出OOM。
SoftReference<byte[]> softReference = new SoftReference<byte[]>(new byte[1024*1024*10]);
System.out.println(softReference.get());
System.gc();
System.out.println(softReference.get());        
byte[] bytes = new byte[1024 * 1024 * 10];
System.out.println(softReference.get());

打印结果:
[B@11d7fff
[B@11d7fff
null

软引用到底有什么用呢?

比较适合用作缓存,当内存足够,可以正常的拿到缓存,当内存不够,就会先干掉缓存,不至于马上抛出OOM。

  • 弱引用

弱引用在很多地方都有用到,比如ThreadLocal、WeakHashMap。

//弱引用的特点是不管内存是否足够,只要发生GC,都会被回收
WeakReference<byte[]> weakReference = new WeakReference<byte[]>(new byte[1]);
System.out.println(weakReference.get());
System.gc();
System.out.println(weakReference.get());

打印结果:
[B@11d7fffnull
null
  • 虚引用
//虚引用必须与ReferenceQueue一起使用,当GC准备回收一个对象,如果发现它还有虚引用,
//当发生GC,虚引用就会被回收,并且会把回收的通知放到ReferenceQueue中。
ReferenceQueue queue = new ReferenceQueue();
PhantomReference<byte[]> reference = new PhantomReference<byte[]>(new byte[1], queue);
System.out.println(reference.get()); //null

//这就是虚引用特点之一了:无法通过虚引用来获取对一个对象的真实引用
public T get() {        
  return null;
}

虚引用有什么用呢?在NIO中,就运用了虚引用管理堆外内存。

相关文章

  • Android使用LeakCanary检测内存泄漏

    Java四种引用 在Java中,有四种不同的引用类型,分别是强引用(Strong Reference)、软引用(S...

  • Java中的四种引用类型

    一、Java中的四种引用类型 JDK 1.2 开始 Java 提供了四种引用类型,分别是强引用、软引用、弱引用、虚...

  • java四种引用类型

    java中得四种引用 Java中有四种引用类型:强引用、软引用、弱引用、虚引用 强引用我们代码中常写,如: Obj...

  • JVM虚拟机读书笔记

    Java VM Runtime Area Java中四种引用: - 强引用(Strong Reference): ...

  • RefenceQueue的源码解析,以及WeakHashMap的

    Java RefenceQueue WeakHashMap 首先介绍Java中的四种引用: 强引用:如Object...

  • Java引用及其应用

    Java 引用分类 Java 中的引用分为四种,具体如下 强引用(StrongReference)强引用是使用最普...

  • Java基础:Java的四种引用

    在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用。包括:强引用,软引用,弱引用,虚引用。这...

  • Java的引用

    参考链接: Java到底是值传递还是引用传递 Java的四种引用方式 Java中的强引用、软引用、弱引用和虚引用 ...

  • Android面试Java基础篇(四)

    问:Java中四种引用类型 答:四种引用类型分别为 强引用、弱引用、软引用、虚引用 强引用(StrongRefer...

  • 深入理解Java弱引用

    Java中的引用类型 Java中存在四种引用,它们由强到弱依次是:强引用、软引用、弱引用、虚引用。下面我们简单介绍...

网友评论

      本文标题:Java中的四种引用

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