0

0

JavaScript引擎(如V8)是如何进行垃圾回收的?

夜晨

夜晨

发布时间:2025-09-28 12:13:01

|

349人浏览过

|

来源于php中文网

原创

V8引擎通过可达性分析识别不可达对象并回收内存,采用分代式管理:新生代用Scavenge算法快速清理短期对象,老生代用标记-清除和标记-整理处理长期对象,并通过增量标记、并发回收与懒性清理减少主线程阻塞,开发者应避免意外引用、及时解绑监听器以防止内存泄漏。

javascript引擎(如v8)是如何进行垃圾回收的?

JavaScript引擎(如V8)通过自动内存管理机制来处理不再使用的对象,这个过程称为垃圾回收(Garbage Collection, GC)。它的核心目标是识别并释放那些程序不再访问的内存,防止内存泄漏。

垃圾回收的基本原理

V8引擎主要采用可达性(reachability)判断来决定哪些对象需要保留。从一组“根”对象(如全局对象、当前执行函数的变量等)出发,遍历所有能直接或间接访问到的对象。无法从根到达的对象被视为垃圾,可以被回收。

分代式垃圾回收机制

V8将堆内存划分为新生代和老生代,基于一个观察:大多数对象生命周期很短。

  • 新生代(Young Generation):存放新创建的对象。使用Scavenge算法(主要是Cheney算法),将内存分为两部分:from-space 和 to-space。存活对象在一次GC中被快速复制到to-space,未复制的就被丢弃。速度快,适合频繁清理短期对象。
  • 老生代(Old Generation):对象在新生代中经过多次回收仍存活,就会晋升到老生代。这里使用标记-清除(Mark-Sweep)和标记-整理(Mark-Compact)算法。先标记所有可达对象,然后清除不可达的,最后可选地进行内存整理以减少碎片。

增量标记与并发回收

为了减少对主线程的阻塞,现代V8引入了以下优化:

码上飞
码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

下载

立即学习Java免费学习笔记(深入)”;

  • 增量标记:将完整的标记过程拆分成多个小步骤,穿插在JavaScript执行之间,避免长时间停顿。
  • 并发标记与清除:在单独的线程上执行标记和清除,不阻塞主线程。V8的Orinoco项目实现了大部分GC工作的并发化。
  • 懒性清理(Lazy Sweeping):在标记完成后,清理工作可以延迟执行,按需进行,进一步降低卡顿感。

实际影响与开发者建议

虽然垃圾回收是自动的,但开发者仍应注意:

  • 避免意外的全局变量引用,防止对象无法被回收。
  • 及时解除事件监听器、定时器等闭包引用。
  • 大对象或长生命周期对象尽量复用,减少频繁分配。
  • 使用Chrome DevTools的Memory面板分析内存快照,排查泄漏。

基本上就这些。V8的垃圾回收机制在不断演进,目标是在性能和内存效率之间取得平衡,让开发者更专注于业务逻辑。理解其原理有助于写出更高效、更稳定的JavaScript代码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

831

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

744

2023.11.06

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

831

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

744

2023.11.06

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

78

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

396

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号