news 2026/5/1 9:21:17

垃圾收集算法了解吗?

作者头像

张小明

前端开发工程师

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

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

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

标记-清除算法

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

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

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

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

标记-复制算法

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

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

  1. 标记-整理算法

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

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

标记-整理算法

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

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

GLM-4V-9B Streamlit部署:GPU显存自动释放+长对话内存管理机制

GLM-4V-9B Streamlit部署:GPU显存自动释放长对话内存管理机制 1. 为什么需要一个真正能跑起来的GLM-4V-9B本地方案 你是不是也遇到过这样的情况:下载了GLM-4V-9B的官方代码,满怀期待地准备跑通多模态对话,结果刚执行就报错——R…

作者头像 李华
网站建设 2026/5/1 6:08:58

Qwen3-TTS-12Hz-1.7B-VoiceDesign模型架构深度解析

Qwen3-TTS-12Hz-1.7B-VoiceDesign模型架构深度解析 1. 从声音设计到模型本质:为什么需要深度理解这个架构 你可能已经试过用自然语言描述来生成一个全新的声音——“带点沙哑的年轻男声,语速偏快,语气里透着几分俏皮”。输入这句话&#xf…

作者头像 李华
网站建设 2026/5/1 6:04:46

Yi-Coder-1.5B机器学习入门:CNN图像分类实战

Yi-Coder-1.5B机器学习入门:CNN图像分类实战 1. 这不是你想象中的CNN教程 看到标题里的“Yi-Coder-1.5B”和“CNN图像分类”,你可能会下意识地皱眉——这到底是讲代码大模型,还是讲图像识别?两者怎么扯上关系的? 其…

作者头像 李华
网站建设 2026/5/1 8:53:24

Qwen3-4B长上下文处理难?256K原生支持部署优化指南

Qwen3-4B长上下文处理难?256K原生支持部署优化指南 1. 为什么你需要关注Qwen3-4B-Instruct-2507 很多人一听到“4B参数”就下意识觉得这是个轻量级模型,适合跑在普通显卡上——但如果你真这么想,可能会错过一个真正能扛大活的选手。Qwen3-4…

作者头像 李华
网站建设 2026/5/1 8:40:19

如何解决Chatbot不支持通义千问的AI辅助开发实践

如何解决Chatbot不支持通义千问的AI辅助开发实践 在构建现代对话式AI应用时,我们常常希望集成市面上最先进的大语言模型,以提供更智能、更丰富的交互体验。然而,许多现有的Chatbot框架或开源项目,其设计往往围绕特定几家主流模型…

作者头像 李华