限制内存的原因
- V8最初为浏览器而设计,不太可能遇到大量内存的使用场景
- 防止因为垃圾回收所导致的线程暂停执行的时间过长
V8的回收策略
- V8采用了一种分代回收的策略,讲内存分为两个生代:新生代和老生代
- V8分别对新生代和老生代使用不同的垃圾回收算法来提升垃圾回收的效率
新生代垃圾回收
- from空间存放不需要被回收的对象,to空间存放需要被回收的对象
-
(下图为回收obj2)
新生代对象的晋升
- 在新生代垃圾回收的过程中,当一个对象经过多次复制后依然存活,他将会被认为是生命周期较长的对象,随后会被移动到老生代中,采用新的算法进行管理
- 在From空间和To空间进行反转的过程中,如果To空间中的使用量超过了25%,那么就将From中的对象直接晋升到老生代内存空间中
老生代垃圾回收
-
老生代内存空间是一个连续的结构
-
标记清除(会导致内存不连续)
-
标记合并