美文网首页
V8垃圾回收机制

V8垃圾回收机制

作者: 荔桑 | 来源:发表于2021-04-29 11:33 被阅读0次

V8主要的垃圾回收算法

V8的垃圾回收策略主要基于分代式垃圾回收机制,主要将内存分为新生代老生代,V8堆的整体内存空间就是新生代所用内存空间加上老生代的内存空间:

内存.png

在分代的基础上,新生代主要通过Scavenge算法进行垃圾回收,在Scavenge具体实现中,主要采用了Cheney算法:
将堆内存一分为二,每一部分空间称为semispace,在这两个semispace空间中只有一个处于使用中称为From空间,另一个处于闲置状态称为To空间:


内存示意图.png

当我们分配对象时,先是在From空间中进行分配。当开始进行垃圾回收时,会检查From空间中的存活对象,这些存活对象将被复制到To空间中,而非存活对象占用的空间将被释放。完成复制后,From空间和To空间角色互换。简而言之,垃圾回收的过程中就是通过将存活对象在两个semispace空间之间进行复制
当一个对象经过多次复制依然存活时,它将会被认为是生命周期较长随后会被移动到老生代中,采用新的算法进行管理
对象从新生代移动到老生代中的过程称为晋升,晋升的条件主要有两个,一个是对象是否经历过Scavenge回收,一个是To空间的内存占用比超过限制
对于老生代的对象主要采用Mark-Sweep和Mark-Compact相结合的方式进行垃圾回收。Mark-Sweep分为标记和清除两个阶段,在标记阶段遍历堆中的所有对象,并标记活着的对象,随后的清除阶段中只清除没有被标记的对象


Mark-Sweep在老生代空间中标记后的示意图.png
Mark-Sweep最大的问题是在进行一次被标记清除回收后,内存空间会出现不连续的状态,有可能需要分配一个大对象的情况这时候所有碎片空间都无法满足此次分配就会提前触发垃圾回收,这次回收是不必要的,为了解决这个问题,使用Mark-Compact在对象标记为死亡后,在整理的过程中,将活着的对象往一端移动,移动完成后直接清理掉边界外的内存
Mark-Compact完成标记并移动存活对象后的示意图.png

相关文章

  • V8垃圾回收机制

    V8主要的垃圾回收算法 V8的垃圾回收策略主要基于分代式垃圾回收机制,主要将内存分为新生代和老生代,V8堆的整体内...

  • v8垃圾回收 - 2023-02-18

    V8引擎垃圾回收策略: V8的垃圾回收策略主要是基于分代式垃圾回收机制,其根据对象的存活时间将内存的垃圾回收进行不...

  • V8引擎的垃圾回收机制

    转载:V8引擎的垃圾回收机制

  • V8 内存管理和垃圾回收机制总结

    这篇文章主要介绍 V8 的内存管理和垃圾回收知识。 V8 内存管理及垃圾回收机制浅析 由于 V8 引擎的原因,No...

  • V8 GC机制

    这篇文章主要介绍 V8 的内存管理和垃圾回收知识。 V8 内存管理及垃圾回收机制浅析 由于 V8 引擎的原因,No...

  • 深入理解V8的垃圾回收原理

    垃圾回收机制 V8的垃圾回收策略基于分代回收机制,该机制又基于 世代假说。该假说有两个特点: 大部分新生对象倾向于...

  • V8垃圾回收机制

    介绍 V8的垃圾回收策略主要是基于分代垃圾回收机制。在垃圾回收演变的过程中,人们发现没有哪一种办法能够满足所有应用...

  • 优化你的内存

    这篇文章主要介绍 V8 的内存管理和垃圾回收知识。(总结来自网易课堂) V8引擎内存回收机制 为什么我们要关注内存...

  • 内存机制

    Node内存由V8进行分配的部分和Node自行分配的部分。 V8的垃圾回收机制与内存限制 V8的内存限制   因为...

  • V8的垃圾回收机制与内存限制

    V8的垃圾回收机制与内存限制 [图片上传失败...(image-5f42f7-1539618971675)]

网友评论

      本文标题:V8垃圾回收机制

      本文链接:https://www.haomeiwen.com/subject/bfhirltx.html