java引用之强、软、弱、虚

强引用

Object a = new Object();

软引用

A-(强)>B-(软)>C
A能获取C的值

当heap内存不够时,会剔除软引用
作用:缓存
在这里插入图片描述
在这里插入图片描述

弱引用

A -(强)>B -(弱)>C
当A与B的强引用去掉后,弱引用会被回收
作用:ThreadLocal
在这里插入图片描述ThreadLocal

threadLocal 中的entry是弱引用

       static class Entry extends WeakReference<ThreadLocal<?>> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal<?> k, Object v) {
                super(k);
                value = v;
            }
        }

在这里插入图片描述t1为null,threadLocal为弱引用,会回收;但是对应的value还是没有回收,会操作内存泄漏,当不用时,需要手动remove

虚引用

A-(强)>B-(虚)>C
A不能获取C的值
当A与B的引用不存在时,C引用会被丢到一个队列中
作用:堆外内存管理(通过队列对堆外内存回收,并去掉JVM中的相关引用)
在这里插入图片描述
Unsafe类可以操作堆外内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值