Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端基础

    • 编程语言

    • 开发工具

    • 前端调试

    • 浏览器原理

      • V8 执行引擎

        • Devtools Console 面板输入了 1+1 ,浏览器内部发生了什么?
        • V8源码解析之Array.prototype.sort
        • V8源码解析之String.prototype.indexOf
        • VSCode 调试 V8 源码
        • 浅谈 V8 的垃圾回收
          • 前言
          • V8 的内存限制
          • 内存结构
          • 垃圾回收
            • 新生代
            • 老生代
            • 大对象
            • GC 时机
          • 模拟实现
          • 拓展阅读
        • macOS 上使用 lldb 和 gdb
        • 从「消失的 1 千粉丝」谈及 toFixed 的坑
      • 渲染机制

    • 浏览器生态

  • 应用框架

  • 工程能力

  • 应用基础

  • 专业领域

  • 业务场景

  • 大前端
  • 前端基础
  • 浏览器原理
  • V8 执行引擎
gahing
2020-02-07
目录

浅谈 V8 的垃圾回收草稿

# 前言

写下文本的灵感是阅读了这篇文章 - 看完这篇垃圾回收,和面试官扯皮没问题了 (opens new window)

该文通俗易懂,详略得当,虽然讲的是 java 的垃圾回收机制,但同样适合于 v8

本文会先介绍 V8 的内存模型,采用的分代回收算法,最后简单模拟垃圾回收整个过程

# V8 的内存限制

如何查看,如何调整,源码中的定义

堆内存相关代码都在 v8/src/heap 目录中 (opens new window)

node 版本

chrome 浏览器

源码中的定义?

https://github.com/v8/v8/tree/master/src/heap

https://github.com/v8/v8/blob/4b9b23521e6fd42373ebbcb20ebe03bf445494f9/src/heap/heap-controller.h#L59

# 内存结构

栈内存,堆内存。。

# 垃圾回收

1:2

8:1:1

# 新生代

标记复制,生命周期较短,需要保存的对象数量较少

# 老生代

采用标记清除,当空间不足时采用标记整理

# 大对象

# GC 时机

增量标记,将 full gc 分割为多个阶段,中间允许穿插 js 任务

# 模拟实现

我们利用 js 数组来模拟堆内存,且规定值仅为 bool 值(取值为 true 表示该位置的 1 字节内存被使用)

# 拓展阅读

  1. 看完这篇垃圾回收,和面试官扯皮没问题了 (opens new window)
  2. 《深入浅出 Node.js》
  3. V8内存管理 (opens new window)
编辑 (opens new window)
#垃圾回收#内存#JavaScript#V8
上次更新: 2024/09/01, 23:56:56
VSCode 调试 V8 源码
macOS 上使用 lldb 和 gdb

← VSCode 调试 V8 源码 macOS 上使用 lldb 和 gdb→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式