Java 四种引用【转】

整理自:马士兵老师详解:Java的四种引用类型(对象的强、软、弱和虚引用)_哔哩哔哩_bilibili

1. Java有哪些引用类型

强软弱虚

2. 什么是强引用?

如上:M类重写了一个finalize 方法。正常不建议重写,重写的目的是为了跟踪M产生的对象被gc垃圾回收的过程。

finalize在对象被回收的时候,会被调用到,所以:当看到打印finalize,就知道 对象被回收 

3. 软引用

当空间不够了,软引用的对象会被回收

可以通过-Xmx20M设置

1. 问题来了?软引用有什么用?

软引用比较适合做缓存

2. SR指向的对象被回收吗?是的

 

4. 弱引用

 如果只有弱引用指向,没有强引用,那么在gc的时候,是会被回收掉的【gc看到,直接回收】

5. 虚引用

虚引用:虚到什么程度呢?get都get不到。会返回一个null

 

那作用是什么呢?

管理直接内存 Direct Memory。。。(也就是堆外内存),不归GC管理,可以归HotSpot (JVM管理)

这一块内存通常用于NIO,也就是非阻塞IO

如:JVM从网卡读取数据,经过操作系统的 内核放到缓冲区,JVM将数据复制到自己的内存里,方便管理 。

那当网络数据越来越多的时候,这个时候效率就很低了,所以:就有了一个功能,可以通过堆里面的引用指向堆外内存,直接就可以拿来使用,用不着copy,也就是Zero Copy

如下场景下:堆外内存如何被回收?JVM需要关注这个点,那为了解决这个点: 

 所以虚引用就是起到这样的作用。。。

1. 首先get不到

 

 

IO缓冲区 :allocateDirect在堆外分配

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值