news 2026/5/13 12:09:02

垃圾收集算法了解吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
垃圾收集算法了解吗?

见名知义,标记-清除(Mark-Sweep)算法分为两个阶段:

  • 标记: 标记出所有需要回收的对象
  • 清除:回收所有被标记的对象

标记-清除算法

标记-清除算法比较基础,但是主要存在两个缺点:

  • 执行效率不稳定,如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低。
  • 内存空间的碎片化问题,标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。
  1. 标记-复制算法

标记-复制算法解决了标记-清除算法面对大量可回收对象时执行效率低的问题。

过程也比较简单:将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

标记-复制算法

这种算法存在一个明显的缺点:一部分空间没有使用,存在空间的浪费。

新生代垃圾收集主要采用这种算法,因为新生代的存活对象比较少,每次复制的只是少量的存活对象。当然,实际新生代的收集不是按照这个比例。

  1. 标记-整理算法

为了降低内存的消耗,引入一种针对性的算法:标记-整理(Mark-Compact)算法。

其中的标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向内存空间一端移动,然后直接清理掉边界以外的内存。

标记-整理算法

标记-整理算法主要用于老年代,移动存活对象是个极为负重的操作,而且这种操作需要Stop The World才能进行,只是从整体的吞吐量来考量,老年代使用标记-整理算法更加合适。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 21:34:44

OpenSpec标准文档的Hunyuan-MT 7B多语言转换方案

OpenSpec标准文档的Hunyuan-MT 7B多语言转换方案 1. 技术标准文档翻译的特殊挑战 当我在处理一份OpenSpec标准文档时,第一反应不是打开翻译工具,而是先叹了口气。这类文档和普通文本完全不同——它里面塞满了专业术语、固定表达、嵌套结构,…

作者头像 李华
网站建设 2026/4/30 5:50:00

Yi-Coder-1.5B与vLLM集成:高性能推理实践

Yi-Coder-1.5B与vLLM集成:高性能推理实践 1. 为什么需要为Yi-Coder-1.5B选择vLLM 在实际开发中,我们经常遇到这样的场景:团队需要一个轻量级但能力扎实的代码模型来嵌入到内部工具链中。Yi-Coder-1.5B正好满足这个需求——它只有1.5B参数&a…

作者头像 李华
网站建设 2026/5/12 4:42:48

BGE-Large-Zh在医疗文本的应用:医学术语标准化

BGE-Large-Zh在医疗文本的应用:医学术语标准化 1. 医疗记录里的“同义词迷宫” 你有没有见过这样的电子病历片段? “患者主诉:心前区闷痛,持续约30分钟,伴冷汗、恶心。查体:心界不大,心率92次…

作者头像 李华