众所周知 V8 引擎是一款目前市面上最主流的 JS 执行引擎,chrome 浏览器和 nodeJs 平台采用的都是采用 V8 引擎来执行 JS 代码。对于这两个平台来说 JS 之所以能在其上高效运转也正是因为 V8 这样一个幕后英雄的存在,这里就提到 JS 的一个高效运转这也是 V8 的一个重要卖点。这个速度之所以快出来其背后有一套优秀的内存管理机制之外,其实 V8 还有一个特点就是采用即时编译。之前很多 JS 引擎都需要将源代码先去专成字节码,然后才能去执行。而对 V8 来说就可以直接将源码给翻译成当前可以直接执行的机器码,这个速度是非常快的。对于 V8 来讲还有一个比较大的特点就是,V8 它的内存是有上限的。V8 的内存空间设置了以个数值,在 64位操作系统上这个上限是不超过 1.5G ;对于32位浏览器,这个数值是不超过 800M 的。为什么 V8 要采用这样一个做法呢?原因可以从两方面可以总结:
- V8 本身就是为了浏览器去制造的,现有的这样一个内存大小对于网页应用来说是足够使用了。
- V8 内部所遵循的垃圾回收机制,也决定了它采用这样一个设置是非常合理的,因为官方去做个这样一个测试,当我们的垃圾内存去达到 1.5G 的时候,如果 V8 去采用增量标记的算法进行垃圾回收,只需要花费 50ms;而如果采用非增量标记的形式去回收,则需要 1m。从用户体验的角度来说,1m 可以说是很长的时间了,所以在这里就以 1.5G 为界限了。