分代算法

最后更新于: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)
';