新生代

发布时间 2023-10-18 10:15:38作者: AngDH

 

 

 

新生代内存是JavaScript中用于存储对象的内存区域。它具有以下特点:
- 内存区域较小
- 垃圾回收频繁

在新生代中,分配内存非常简单。只需保存一个指向内存区的指针,并根据新对象的大小进行递增即可。当指针到达新生代内存区的末尾时,就会触发一次清理操作。

新生代内存使用Scavenge算法进行垃圾回收。该算法将内存分为两个部分,分别称为From空间和To空间。在分配对象时,始终使用From空间进行分配。而在垃圾回收过程中,Chrome V8引擎会检查From空间中存活的对象,并将它们复制到To空间中。完成复制后,From空间和To空间的角色互换,原来的From空间成为新的To空间,而原来的To空间则成为From空间。

由于新生代内存的特点,总有至少一半的内存处于空闲状态。即使有对象经过多次新生代的垃圾回收仍然存活,也会被移动到老生代内存中。这种操作被称为对象的晋升。

对象的晋升标准有两个:
1. 在垃圾回收的过程中,如果对象已经经历了一次新生代的清理,就会被晋升。这类似于游戏中的晋级赛制,经过一次筛选后未被淘汰的选手将晋级。
2. 在垃圾回收的过程中,如果To空间的使用超过了25%,对象也会被晋升。这类似于游戏中的补位晋级制度,如果淘汰区的位置已满,当前选手无需被筛选就可以直接晋级。