【JVM-02】垃圾收集(回收)算法

【JVM-02】垃圾收集/回收算法

  • [1. 分代收集算法](#1. 分代收集算法)
  • [2. 标记-清除算法](#2. 标记-清除算法)
  • [3. 标记-复制算法](#3. 标记-复制算法)
  • [4. 标记-整理算法](#4. 标记-整理算法)

1. 分代收集算法

分代收集(回收)算法根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。

比如在新生代中,每次收集都会有大量对象死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的所以我们可以选择"标记-清理"或"标记-整理"算法进行垃圾收集。

2. 标记-清除算法

算法分为"标记"和"清除"阶段:首先标记出所有需要回收的对象,在标记完成后,统一清除(回收)掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。它是最基础的收集算法,会带来两个明显的问题:第一个是执行效率不稳定,如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低;第二个是内存空间的碎片化问题,标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

3. 标记-复制算法

标记-复制算法为了解决标记-清除算法面对大量可回收对象时执行效率低的问题。它可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收。缺点是内存支持量偏低,优点是不会产生内存碎片。

4. 标记-整理算法

根据老年代的特点特出的一种标记算法,标记过程仍然与"标记-清除"算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一段移动,然后直接清理掉端边界以外的内存。

相关推荐
hetao17338378 分钟前
2025-11-13~14 hetao1733837的刷题记录
c++·算法
hansang_IR18 分钟前
【题解】洛谷 P2476 [SCOI2008] 着色方案 [记搜]
c++·算法·记忆化搜索
趙卋傑21 分钟前
常见排序算法
java·算法·排序算法
阿巴~阿巴~1 小时前
IPv4地址转换函数详解及C++容器安全删除操作指南
linux·服务器·c++·网络协议·算法·c++容器安全删除操作·ipv4地址转换函数
TT哇1 小时前
【面经 每日一题】面试题16.25.LRU缓存(medium)
java·算法·缓存·面试
SKYDROID云卓小助手1 小时前
无人设备遥控器之差分信号抗干扰技术
网络·stm32·单片机·嵌入式硬件·算法
美狐美颜SDK开放平台1 小时前
什么是美颜sdk?美型功能开发与用户体验优化实战
人工智能·算法·ux·直播美颜sdk·第三方美颜sdk·视频美颜sdk
@宁兰2 小时前
算法实现总结 - C/C++
c语言·c++·算法
ZStack开发者社区3 小时前
VMware替代 | ZStack ZSphere虚拟化平台金融级高可用能力解析
服务器·jvm·金融·云计算
Doro再努力3 小时前
2025_11_14洛谷【入门1】数据结构刷题小结
前端·数据结构·算法