Java中的四种引用

硅谷探秘者 2083 0 0

Java中的四种引用


强引用(Strong Reference

软引用(Soft Reference

弱引用(WeakReference

虚引用(PhantomReference



1.强引用(Strong Reference

     强引用是指在程序代码中普遍存在的,类似“Object obj=new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。

    只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象



2.软引用(Soft Reference

    软引用是用来描述一些有用但并不是必需的对象。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。JDK 1.2之后,提供了SoftReference类来实现软引用。

public class TestMain7 {
         public static void main(String[] args) {
                   System.out.println("----------------");
                   SoftReference<Boy> str = new SoftReference<Boy>(new Boy("jiaa3",18));
                   int i=0;
                   Map<String,SoftReference<Boy>> ref=new HashMap<String, SoftReference<Boy>>();
                   while(str.get()!=null) {
                            ref.put("jia"+i,new SoftReference<Boy>(new Boy("jia"+i,++i)));
                   }
         }
}


/****/

hello

null




3.弱引用(WeakReference

    弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象

public class TestMain8 {
    public static void main(String[] args) {
        WeakReference<String> sr = new WeakReference<String>(new String("hello"));
        System.out.println(sr.get());
        System.gc();                //通知JVM的gc进行垃圾回收
        System.out.println(sr.get());
    }
}



4.虚引用(PhantomReference

    虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。



评论区
请写下您的评论...
暂无评论...
猜你喜欢
official 830 于前面是模糊,所以不能利顺序,必须一个个去找,看是否满足条件。这样会导致全索扫描或者全表扫描。如果是这样条件wherecodelike'A%',就可以查找CODEA开头CODE位置,
official 1101 RabbitMQ作为一个消息队列提供一个通消息发送和接收平台,并且保证消息在传输过程安全可靠。消息(Message)由Client发送,RabbitMQ接收到消息之后通过交换机转发到对应
java基础 4677 java启动线程方式1.继承Thread类,重写run方法,调start方法启动线程2.实现Runnable接口,重写run方法,调start方法启动线程3.实现Callable接口代码如
java虚拟机(jvm) 3785 类加载时机类从被加载到虚拟机内存开始,到卸载出内存为止,它整个生命周期包括:加载(LoadingVerification)、准备(Preparation)、解析(Resolution)、初始化
java基础 1790 javabreak特别法(实现goto)publicclassA8{ publicstaticvoidmain(String[]args){ a: for(inti=0;i10;i
java基础 1964 一、什么是countDownlatchCountDownLatch是一个同步工具类,它通过一个计数器来实现,初始值为线程数量。每当一个线程完成了自己任务,计数器值就相应得减1。当计数器到达0
数据库 1159 ,1warning(0.01sec)从执行计划可以看出,该sql是文件排序,排序字段没有添加任何索。  为什么文件排序会出现这问题呢?主要还是取决与filesort排序算法
java基础 1221 核心类ZipInputStreamapi文档请参考:https://nowjava.com/docs/java-api-11/java.base/java/util/zip
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。