java的内存回收

本文深入探讨Java中的引用类型(强引用、软引用、弱引用、虚引用),并详细解释Java对象在内存中的不同状态(可达、可恢复、不可达),以及垃圾回收机制的三种基本算法(复制、标记、压缩标记)。同时阐述堆内存的分代回收策略(Young代、Old代、Permanent代),提供全面的技术理解。

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

java引用的 功能 和 意义:

java引用 分为  强引用,软引用,弱引用,虚引用。

强引用 :直接 用变量指定 java对象,该变量一直存在于 内存,直到 该 java对象 消失回收,那么变量一起回收。

软引用: 用变量指定 java对象,使用完变量后,将变量的值置为 null,如果 此时内存紧张,那么会将 该变量回收。

弱引用:    用SoftReference实现, 具体查看 API, 典型的实例有 WeakHashMap 。

虚引用: 必须和 其他几种引用一起使用。引用队列由 ReferenceQueue实现,虚引用通过 PhantomReference 类实现。


java对象 在内存中 的 不同状态:

可达,可恢复,不可达  三种状态 。


可达: 当有 变量引用到 java 对象时,是 可达状态。

可恢复: 当对象 没有 被变量引用到 时,会 先回收 放到 可恢复状态。

不可达 :当对象所有关联都被切断,且系统调用所有对象的 finalize 方法依然没有使其变成可达状态,那这个对象将 永久 失去 引用,变成 不可达状态。



java 垃圾回收机制的基本算法:

三种算法: 复制, 标记,压缩标记。

复制算法: 分配和原来内存空间一样大小的空间,将原内存空间内,所有可达对象复制到 新内存空间中。再删除原内存空间。

标记算法: 标记内存空间中,可达的对象,将没有标记的对象 删除。

标记压缩算法 : 结合以上两种算法。


堆内存的分代回收:

Young代,Old代,Permanent代 :

Young代: 执行最频繁,不断遍历可达对象,如果可达对象事实上 已经不可达了,那么回收调。

Old代 : 通过Young代的多次回收,依然是 可达状态的对象,那么垃圾回收机制将 这个对象 转移到 Old代。执行频率不会很高,因为很少有对象会死掉。

Permanent代 :主要用于装在class,静态方法等信息,垃圾回收机制 一般不会回收Permanent中的对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值