• Java的四种引用:强引用、软引用,弱引用和虚引用


    强引用

    在Java中使用如下方式声明的引用是强引用

    String str = new String("abc");
    str 是堆中对象new String("abc")的强引用,被强引用的对象在任何时候gc不会被回收,即使内存不足汇报OOM。

    软引用

     在Java中使用如下方式声明的引用是软引用

    SoftReference<Car> b = new SoftReference<>(new Car("bcd", 1));

    软引用对象在内存不足gc时会被回收

    弱引用

    在Java中使用如下方式声明的引用是弱引用

    WeakReference<Car> a = new WeakReference<>(new Car("abc", 1));
    System.out.println(a.get());
    System.gc();
    System.out.println(a.get());

    a是堆中对象new Car("abc", 1)的弱引用,弱引用在gc时会被回收。上面的代码输出:

    如果一个对象既被强引用又被弱引用,那么就按强引用来

    虚引用

    在Java中使用如下方式声明的引用是虚引用

    String str = new String("abc");
    ReferenceQueue queue = new ReferenceQueue();
    PhantomReference pr = new PhantomReference(str, queue);
    System.out.println(pr.isEnqueued());
    str = null;//切断引用
    System.gc();//回收
    while (true){
      boolean flag=pr.isEnqueued();
      if(flag){
         System.out.println("已被回收");
         break;
      }else {
      System.out.println("未被回收");
      }
    }

    虚引用每次get的时候都是null,虚引用不破坏原来对象的生命周期如同空气,使用方法需要配合ReferenceQueue使用。对象在被gc后,引用对象被加入到ReferenceQueue。可以使用虚引用来判断对象是否被回收。

  • 相关阅读:
    Cloudera Manager 4.6 安装部署hadoop CDH集群
    linux下统计目录下所有子目录的大小
    jvisualvm远程监控tomcat
    安装ubuntu server时可能会需要的配置
    安装配置maven私服-nexus
    maven环境配置
    各版本eclipse的maven配置
    转载:Centos7 从零编译Nginx+PHP+MySql 序言 一
    MongoDB系列一:CentOS7.2下安装mongoDB3.2.8
    MongoDB Windows环境安装及配置
  • 原文地址:https://www.cnblogs.com/billshen/p/13289677.html
Copyright © 2020-2023  润新知