分代算法
最后更新于:2022-04-02 04:09:21
[TOC]
## 思考
编程时有很多死去很快 die young)的对象——经常创建一个对象马上就销毁了。基于mark- sweep的算法,会产生大量的碎片。而且大量的对象,如果是 die young的话,遍历 root se就不划算。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/99/1f/991fff7ff9deed2c14f61216262ac741_400x52.png)
## 基于复制的算法
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d3/3d/d33d7f1d82bfff86000fa22b2c0a24d9_400x323.png)
因为一般而言,活的越久的对象,还能活更久的可能性会更大
## 拆分生代
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/88/ae/88aea40602a1c83c8f53eeed78087564_400x172.png)
新生代基于复制算法,老生代基于Mark Swep 算法
### java 的内存
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/24/f7/24f7d44ba7bb1e38a6365a2e0c181e1a_400x112.png)
- Eden 快速创建销毁的区间
- s0 标识 survive(存活区)0,s1的对象比s0活下去的可能性更大
- s0,s1等区域块慢了的时候在进行回收
- Tenured 老生代的用 Mark-Sweep 算法
- Permanent 永久存货的区域
### V8(node.js)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a2/c1/a2c138fe5cf23954ab693af241fd830e_400x219.png)
';