Chrome V8引擎的垃圾回收机制

转载 2018年04月17日 10:45:27
Chrome V8引擎的垃圾回收机制


0、JavaScript 垃圾回收器的利与弊
优点:
简化程序的内存管理,由垃圾回收机制自动管理内存,降低程序员的负担,以达到解决内存泄漏的目的;

缺点:
V8引擎的垃圾回收机制,不允许人为手动触发,无法对内存管理进行任何干预;

1、内存管理的必要性
1.1 V8引擎的垃圾回收机制运行在浏览器中
基本没有太多内存管理的必要
原因:
a.V8引擎实例的生命周期不长(谁没事一个页面开着几天几个月不关);
b.影响范围小(如果不幸发生内存泄露等问题,仅仅会影响到一个终端用户);
c.无论这个V8实例占用了多少内存,最终在关闭页面时内存都会被释放;
1.2 运行在服务器端(Node)
内存管理就十分必要了
因为一旦发生内存泄漏,就会导致整个服务系统瘫痪;

2、Chrome内存大小的限制
之所以限制,是因为Chrome的垃圾回收机制的限制,V8在执行垃圾回收时会阻塞JS其他应用逻辑,直到垃圾回收结束。这样会使浏览器失去对用户的相应,造成假死现象。

3、V8的垃圾回收机制原理
3.1 判断标准
一个对象为活对象当且仅当它被一个根对象或另一个活对象指向;
根对象永远是活对象;
3.2 哪些是根对象?
全局对象:如Node的global,浏览器中的window;
被局部变量所指向的对象也属于根对象,因为它们所在的作用域对象被视为根对象;

4、V8的分代回收策略(新生代和老生代)
3.1 新生代垃圾回收策略
3.1.1 新生代特点
大多数对象被分配到这里;
区域小;
垃圾回收频繁;
3.1.2 算法思想
将内存一分为二,一个叫From空间,另一个叫To空间;
将From空间中的活跃对象复制到To空间中;
释放From空间的非活跃对象;
然后From空间与To空间角色互换;
循环下去;
3.1.3 算法特点
a) 会不会浪费很多内存?
虽然浪费一半内存,但因为新生代内存空间较小,所以浪费的并不多。
b) 会不会来回复制导致效率低下?
因为新生代内存空间中绝大多数是非活跃对象,所以复制的比例很小,效率并不低。
具体例子见转发连接
3.2 如何判断一个仅仅被老生代对象指向的新生代对象是否存活?
特点:
仅被一个对象指向;
还是个老生代对象;
如何判断?
为了解决这个问题,需要建立一个列表用来记录所有老生代对象指向新生代对象的情况。每当有老生代对象指向新生代对象的时候,我们就记录下来。
3.3 新生代对象晋升老生代的标准
a) 经历过新生代的垃圾回收清理,会复制到老生代内存中;
b) 从From空间复制到To空间,如果To空间的使用超过25%,直接复制到老生代中;

3.4 老生代垃圾回收策略
3.4.1 老生代特点
生存周期较长或常驻内存的对象;
3.4.2 算法思想
Mark-Sweep(标记清除)+Mark-Compact(标记整理)相结合
标记清除:清理非活跃对象;
标记整理:解决标记清除带来的内存碎片化的问题;

JAVA应用性能监控与调优

介绍JDK自带的监控工具和一些第三方工具的使用,主要包括:jps、jstat、jmap、jstat、jstack、jvisulaVM、javap、MAT、btrace、jvm内存结构与GC调优、tomcat监控、nginx监控、java代码优化。
  • 2018年04月16日 17:53

浅谈V8引擎中的垃圾回收机制

V8引擎中的垃圾回收机制
  • shmnh
  • shmnh
  • 2016-03-17 02:03:02
  • 960

浅谈Chrome V8引擎中的内存回收机制

垃圾回收器 JavaScript的垃圾回收器 JavaScript使用垃圾回收机制来自动管理内存。垃圾回收是一把双刃剑,其好处是可以大幅简化程序的内存管理代码,降低程序员的负担,减少因 长时间运转而带...
  • sportboy03
  • sportboy03
  • 2015-07-17 15:46:56
  • 1412

nodejs的v8引擎垃圾回收机制学习

nodejs的v8引擎垃圾回收机制学习
  • qinghua9
  • qinghua9
  • 2014-07-25 23:22:31
  • 4488

node学习笔记--- v8的垃圾回收机制

以下内容基本摘自《深入浅出Node.js》         v8作为JavaScript引擎是非常优异的,在浏览器的应用场景中是绰绰有余的,但是其固有的内存限制(64位系统下约1.4GB,32位系统...
  • CraigChencc
  • CraigChencc
  • 2016-08-06 17:00:34
  • 464

JS引擎-- Chrome V8 引擎入门

link:http://www.cnblogs.com/liuning8023/archive/2012/11/03/2752761.html https://developers.google.c...
  • xyqzki
  • xyqzki
  • 2015-05-15 15:37:59
  • 10630

Chrome浏览器v8引擎源代码

  • 2009年04月27日 13:34
  • 4.94MB
  • 下载

Chrome V8引擎介绍

随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScript脚本。V8引擎就是为解决这一问题而生,在node中也...
  • heyeqingquan
  • heyeqingquan
  • 2017-12-19 10:17:13
  • 349

Chrome V8 引擎移植到 Android

如何将 Chrome V8 引擎移植到 Android?
  • ft2028739
  • ft2028739
  • 2016-08-25 11:34:33
  • 4855

V8的垃圾回收机制

V8的内存分代 新生代中的对象为存活时间较短的对象。 老生代中的对象为存活时间较长或常驻内存的对象。 新生代对象——Scavenge算法 它将堆内存一分为二,每一部分空间称为semis...
  • chanda_yang
  • chanda_yang
  • 2016-08-06 15:25:20
  • 256
收藏助手
不良信息举报
您举报文章:Chrome V8引擎的垃圾回收机制
举报原因:
原因补充:

(最多只允许输入30个字)