深入浅出node.js学习笔记—node内存管理及GC机制

栏目: Node.js · 发布时间: 6年前

内容简介:在node.js中,内存主要分为两个部分,堆内存和栈内存可通过

在node.js中,内存主要分为两个部分,堆内存和栈内存

  • 堆内存(heap):存放对象和闭包上下文,v8使用垃圾回收机制管理堆内存
  • 栈内存(stack):存放局部变量,栈内存的分配比较简单,当程序离开某作用域后,其栈指针下移(回退),整个作用域的局部变量都会出栈被回收。

可通过 process.memoryUsage() 查看内存使用情况,单位为字节

深入浅出node.js学习笔记—node内存管理及GC机制

  • rss是分配的整体物理内存,包括堆、栈、代码段
  • heapTotal是整体堆内存
  • heapUsed是被使用的堆内存
  • external: 代表v8管理的绑定到javascript的c++对象的内存

通常情况下,v8对堆内存的分配为, 64位系统下1.4GB,32位系统下0.7GB

node将堆内存分为新生代和老生代

  • 新生代:存放存活时间较短的对象
  • 老生代:存放存活时间较长的对象

在分代的基础上,对于新生代使用Scavenge算法,老生代使用Mark-Sweep和Mark-Compact

  • 对象已经经历过一次复制翻转操作。
  • To空间使用比例超过25%,设置25%的比例是因为,To空间将变成From空间,如果使用比例过高,可能影响后续的内存分配。

Scavenge算法

Scavenge算法主要通过 Cheney算法 实现,Cheney算法将新生代分为两部分,叫做 SemiSpace空间 ,该两个SemiSpace空间分别叫做 From空间和To空间

From空间为使用空间,To空间为闲置空间。分配新的内存空间时会分配到From空间。开始进行垃圾回收时,会检查From空间内的对象,将存活对象复制至To空间,释放From空间,然后将From空间和To空间进行翻转。

Scavenge算法的优点是速度快,无内存碎片,缺点是,只能使用一般的内存空间,但是由于新生代都是存活时间较短的对象,需要复制的对象属于少数。属于使用空间换时间的典型算法。只适用于新生代垃圾回收策略。

在新生代回收阶段,如果存活对象满足以下两个条件,会将该对象移动至老生代,该阶段叫做晋升

  • 对象已经经历过一次复制翻转操作。
  • To空间使用比例超过25%,设置25%的比例是因为,To空间将变成From空间,如果使用比例过高,可能影响后续的内存分配。

Mark-Sweep(标记清除)和Mark-Compact(标记整理)

Mark-Sweep分为标记和清除两个阶段,在标记阶段遍历所有老生代对象,对还存活的对象进行标记,在清除阶段释放未被标记的内存。

深入浅出node.js学习笔记—node内存管理及GC机制

Mark-Sweep最大问题是,经过清除阶段后,内存空间会出现不连续状态,影响以后的内存分配。可能出现一个对象,需要分配内存空间很大,而现有内存碎片不能完成分配,进行提前垃圾回收,该回收是没有必要的。

为了解决Mark-Sweep的内存碎片问题,Mark-Compact被提了出来,它主要是在标记之后,将存活的对象往一侧移动,完成移动后,直接释放边界外的内存。

深入浅出node.js学习笔记—node内存管理及GC机制

Incremental Marking

该三种算法执行时,为了保证javascript应用逻辑与垃圾回收机制保持一致,垃圾回收时都需要将应用逻辑停止,这种情况称之为“ 全停顿

新生代Scavange算法,由于分配内存空间较小,存活对象较少,全停顿影响较少。

但是老生代内存空间较大,存储对象较多,全停顿时间较长。所以V8为了减少停顿空间,从标记阶段开始,改为增量标记(Incremental Marking)。将整体拆分为小“步进”,没执行一个“步进”就让js应用逻辑执行一会儿, 垃圾回收与应用逻辑交替进行。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

跟小贤学运营

跟小贤学运营

陈维贤 / 机械工业出版社 / 2016-12-9 / 69.00

这是一部能帮助运营新人快速构建互联网运营方法论和快速掌握互联网运营实操的著作,是小贤在百度贴吧和小红书成长经历和运营经验的复盘。书中包含5大运营主题、40余种运营工具和渠道、50余种运营方法和技巧、100余个真实接地气的运营案例,能迅速帮助运营新人掌握全套实操技能和构建完整运营体系。 本书的视角和知识体系都比较立体化: 既有百度这样的互联网巨头运营规范和思路,又有小红书这样的明星创业公......一起来看看 《跟小贤学运营》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

html转js在线工具
html转js在线工具

html转js在线工具