Java强软弱虚四大引用

本文详细解释了Java中的强引用、软引用、弱引用和虚引用的原理及应用场景,重点阐述了它们在内存管理和垃圾回收过程中的作用,以及如何避免内存泄露。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


提示:以下是本篇文章正文内容,下面案例可供参考

一、强引用

在Java中,强引用(Strong Reference)是最常见的引用类型。当我们创建一个对象并将其赋值给一个变量时,实际上就是创建了一个强引用。这意味着只要这个引用变量还存在,垃圾回收器就不会回收它所引用的对象。(除非等于null)

简单来说日常使用的大部分都是强引用,即使OOM也不回收,所以往往是导致内存泄露的元凶

代码如下(示例):

public class Test {
   
    public static void main(String[] args) throws Throwable {
   
        /**
         * 虚拟机配置选项
         * VM Options :-XX:+PrintGCDetails -Xms10m -Xmx10m
         * -XX:+PrintGCDetails:打印 GC 的详细信息
         * -Xms10m:设置初始化堆空间大小为 10m
         * -Xmx10m:设置最大堆空间大小为 10m
         */
        // 强引用
        byte[] bytes = new byte[4 * 1024 * 1024];
        // 调用 GC
        System.gc();
	}
}

输出结果(如下):

可以看出 bytes 并没有存储任何数据,仅仅是开辟空间,但是 GC 后仍然存在

在这里插入图片描述

在这里插入图片描述


二、软引用

在Java中,软引用(SoftReference)是一种特殊类型的引用,它比强引用弱,但比弱引用强。当系统内存不足时,即 JVM 空间即将耗尽,垃圾回收器会优先清理那些只被软引用关联的对象。如果一个对象只剩下软引用,那么在内存充足的情况下,该对象不会被回收;但在内存不足时,这个软引用指向的对象会被垃圾回收器回收以释放内存。
软引用通常用于实现内存敏感的缓存,例如图片缓存。当系统内存紧张时,这些缓存可以被自动清除,从而避免了 OutOfMemoryError 异常的发生,同时,在内存资源相对充足时,又能保持缓存的功能,提高程序性能。

简单来说,就是内存不足才回收

代码如下(示例):

public class Test {
   
    public static void main(String[] args) throws Throwable {
   
        /**
         * 虚拟机配置选项
         * VM Options :-XX:+PrintGCDetails -Xms10m -Xmx10m
         * -XX:+PrintGCDetails:打印 GC 的详细信息
         * -Xms10m:设置初始化堆空间大小为 10m
         * -Xmx10m:设置最大堆空间大小为 10m
         */
        // 软引用
        Map<String, SoftReference<byte[]>> map = new HashMap<>();<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值