V8简介
V8是Chrome浏览器的javascript解释器,在第三次浏览器大战中,Chrome凭借优秀的V8引擎胜出。目前该JavaScript引擎已用于其它项目的开发。第一个版本随着第一个版本的Chrome于2008年9月2日发布。
如此强大的js解释器,却存在着隐患的内存溢出问题,这是因为v8 引擎初始状态下,64位机器只被分配了1.4G的内存,32位机器只被分配了0.7G的内存,就算你有再大的内存,也会被浪费掉得不到合理的使用,那么为什么V8会只被分配了这极少的内存呢。
这是因为开发这个js虚拟机的初衷在于客户端,也就是浏览器方向,这1.4G在客户端那是绰绰有余。但在后端Node 上,可就不显得很多了,在高并发的情形下,很有可能导致内存溢出,使Node的异步高并发性能不能足以得到发挥。
因此我们很有必要去了解V8内在的GC机制。以便发挥它最大的性能。
浅谈GC
每当我们声明一个对象,V8就会在堆内开辟一块内存用来存储这个对象,各种GC算法向来不是写一次就能适用于各种情形,各个对象的生存周期长短不一,于是把在堆上的各个对象划分为新生代和老生代。因此,V8上的堆看上去大概是这样的。