node学习笔记--- v8的垃圾回收机制
来源:互联网 发布:大学网络宣传部 编辑:程序博客网 时间:2024/04/27 18:26
以下内容基本摘自《深入浅出Node.js》
v8作为JavaScript引擎是非常优异的,在浏览器的应用场景中是绰绰有余的,但是其固有的内存限制(64位系统下约1.4GB,32位系统下约0.7GB)不利于node服务器层面的开发。所有JavaScript对象都是通过堆来进行分配的。但是可以利用堆外内存突破内存限制的问题,buffer对象是典型,它不同于其他对象,不经过v8的内存分配机制,不会有内存大小限制。
v8的垃圾回收策略主要基于分代式垃圾回收机制。在v8中,主要将内存分为新生代和老生代。新生代的对象为存活时间较短的对象,老生代的对象是存活时间较长或常驻内存的对象。不同代的对象采用不同的算法进行垃圾回收。新生代采用scavenge算法,老生代采用mark-sweep&mark-compact算法
scavenge算法具体实现采用了Cheney算法,这是一种用复制的方式实现的垃圾回收算法。它将堆内存分为两部分,from空间和to空间。分配对象内存时在from空间进行,to空间处于闲置状态。当开始垃圾回收时复制from空间中的存活对象到to空间去,非存活对象占用的空间会被释放掉。完成后,两个空间角色互换。很显然,这是一种典型的牺牲空间换取时间的算法。新生代对象的生命周期较短且存活对象只占少部分,因此这个算法很适合新生代。
mark-sweep算法就是一般意义上的标记清除,标记阶段标记存活的对象,清除阶段清除没有被标记的对象。这个算法最大的问题就是内存碎片问题,mark-compact就是为了解决这个问题而提出的,即标记整理。标记整理,顾名思义就是说在标记后整理存活的对象,将其往一端移动,移动完成后,清理掉死亡对象。
上述3种算法的执行都需要将应用逻辑暂停下来,等到垃圾回收执行完再恢复应用逻辑,这样的行为称为全停顿(stop-the-world)。这样的操作应用于新生代垃圾回收时影响不大,但是老生代就不一样了,内存配置得大,存活对象也多,全堆垃圾回收时造成应用的停顿就会比较长了。改善方法有增量标记(incremental marking)、延迟清理(lazy sweeping)和增量式整理(incremental compaction),同时还有并行标记和并行清理,这是利用多核进行性能优化。
0 0
- node学习笔记--- v8的垃圾回收机制
- V8的垃圾回收机制
- nodejs的v8引擎垃圾回收机制学习
- 浅谈V8引擎中的垃圾回收机制
- c#学习笔记-.net垃圾回收机制
- C#学习笔记-垃圾回收机制
- C#学习笔记之垃圾回收机制
- Java学习笔记---垃圾回收机制
- JVM垃圾回收机制学习笔记
- Java学习笔记之垃圾回收机制
- Java的垃圾回收机制笔记
- java学习--独特的垃圾回收机制
- 垃圾回收学习笔记
- Java笔记--垃圾回收机制
- java 垃圾回收机制笔记
- java垃圾回收机制笔记
- java垃圾回收机制学习
- 学习Java垃圾回收机制
- laravel 如何引入自己的函数或类库
- cmake配置基本工程和多线程
- json扫盲
- 这就是真实的以色列,太可怕了!
- 安卓应用开发入门视频资源链接地址
- node学习笔记--- v8的垃圾回收机制
- bzoj1030(ac自动机+dp)
- 不要在 Rake 中直接 Return
- Linux延时处理
- DllMain详解
- 51nod 1471 小S的兴趣 (分块)
- java面试题9--数组高级-二分查找
- 设计类的基本原则
- 有json,xml实现 App 接口