最新版:V8 中的垃圾收集(GC),图文指南

优采云 发布时间: 2022-10-02 13:11

  最新版:V8 中的垃圾收集(GC),图文指南

  原标题:V8 中的垃圾采集,图文并茂的指南 原文链接:@_lrlna/garbage-采集-in-v8-an-illustrated-guide-d24a952ee3b8

  本指南不同于我迄今为止编写的任何其他指南,我在其中添加了一些草图。我勾勒出垃圾采集 (GC) 的整个概念以及它是如何在 javascript 中处理的,更准确地说是在运行 javascript 的引擎中。顺便说一句,本指南面向初学者,并未涵盖 V8 内存管理的所有方面和 V8 的内部结构。我添加了一些资源来帮助您深入挖掘。本指南重点关注✨javascript✨,对于某些语言,垃圾回收是完全不同的,例如 C 语言。

  好的,让我们开始吧。

  什么是 v8?

  V8 是 JavaScript 的运行时引擎,不要与你最喜欢的番茄汁混淆,它负责编译和执行你喜欢的 JavaScript。V8 有一个分代垃圾采集器,我稍后会解释。它与 Chrome 一起使用,而 SpiderMonkey 是 Mozilla 的引擎,而 Chakra 是 Microsoft 的。基本上在运行 javascript 时,您需要一个引擎来处理它,而 V8 是您的选择之一,无论是在浏览器中还是在 node.js 环境中。(PS V8 是✨开源✨。)

  什么是垃圾采集?

  垃圾采集的重点是通过使用特定程序来管理内存使用情况。C等语言往往可以直接操作程序中的内存,并在程序的上下文中分配和释放对象。另一方面,ECMAScript 缺少访问内存管理的特定接口(是的,这意味着没有 API)。这基本上意味着程序中的所有内存管理权限都转移到了V8。

  

  由于我们无法访问无限量的内存,垃圾采集器的工作是查看内存中分配的对象以确定它们是死的还是活的。那些活着的留在内存中,那些死的被删除,内存被分配回堆。

  什么是堆?堆是一个非结构化区域,堆中的对象占用分配的内存。这种分配是动态的,因为对象的大小/生命周期/数量是未知的,需要在运行时分配和释放。

  如果我们看一下并发模型,堆直接与调用堆栈一起工作,因为堆栈上的对象需要进行内存分配。它看起来像这样:

  死或生?

  如何检查一个对象的生死是客户端或程序代码是否可以到达该对象。您能想到的最可达的对象可能是在根范围中定义的对象。

  一些 C++ 绑定(或客户端上的 Web API)也是根的一部分,因此您可以通过例如 setInterval 直接访问它。

  可达性也可以这样理解:其他对象或根是否可以获取,如果可以,则保留该对象所需的内存。

  

  那么我们如何进行垃圾回收呢?(告诉我告诉我!)

  当创建新对象或新“指针”时,V8 会在堆上分配内存。(javascript没有真正的指针,所以“指针”在技术上只是对原创对象的引用的副本)。堆中不同类型的对象会占用不同的空间,其组织方式如下:

  出于垃圾采集的目的,V8 将堆分为两部分:新生区和陈旧区。当您执行需要 V8 分配内存的操作时,V8 会在新区域中分配空间。当你不断地添加到堆中时,你最终会耗尽内存,所以 V8 将不得不运行一次 GC 来清理。新创建的对象在对象死亡时被快速分配和清理(更短和更快的采集)。一旦对象“存活”了一些(确切地说是 2 个周期)采集扫描周期,它们就会被提升到父区,在一个单独的周期中采集垃圾。

  较旧的对象是那些在不止一次垃圾采集扫描中幸存下来的对象,这意味着它们仍然被其他对象引用并且仍然需要占用该内存。它们通常不引用较年轻的对象,只引用较旧的对象。主要周期不经常发生。在将足够多的物体移动到旧区域后,通常会发生一个大循环。

  来源.js

  本指南来自 lrlna 在 github 上的 sketchin 指南✨。

  最新版:ArchiveWebpage(网页存档) V0.8.1 官方版

  ArchiveWebpage 是浏览器的网页存档和扩展类型工具。该工具可以帮助您以扩展的方式归档网页。它非常适合与客户端一起使用。网页内容会在您需要时保存和复制!

  【软件功能】

  直接在浏览器中创建高保真网络档案

  

  该扩展允许用户直接在浏览器中创建高保真网络档案。

  启用后,扩展程序“记录”特定选项卡上的网络流量并将数据存储在浏览器中。记录页面显示所有存档页面的列表。

  该扩展允许用户重播存档网页(使用 replayweb.page 系统)并允许用户以标准 WARC 和新 WACZ 格式导出存档网页。

  

  【软件特色】

  直接记录网页上某段时间的数据

  随时保存网页上的相关内容

  以 WARC 和新的 WACZ 格式导出

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线