pull/1/head
595208882@qq.com 3 years ago
parent 4413e567fe
commit f66a4b03bf

@ -782,6 +782,8 @@ GC Roots 大体可以分为三大类:
### 扩展回收算法
https://juejin.cn/post/6896035896916148237
目前JVM的垃圾回收器都是对几种朴素算法的发扬光大没有最优的算法只有最合适的算法
- **复制算法Copying**:复制算法是所有算法里面效率最高的,缺点是会造成一定的空间浪费
@ -821,8 +823,28 @@ GC Roots 大体可以分为三大类:
#### 标记复制Mark-Coping
标记-复制算法将内存分为两块相同大小的区域比如新生代的Survivor区每次在其中一块区域分配元素当这块区域内存占满时就会将存活下来的元素复制到另一块内存区域并清空当前内存区域。
- 缺点:浪费一半的内存空间
- 优点:简单高效
**JVM在Eden区保存新对象在GC时将Eden和Survivor中存活对象复制到Survivor的另一个分区。这是JVM对复制算法的一个优化。只浪费了1/10的内存空间【JVM的Eden区和Survivor区的比例为 8:2】**
![标记复制](images/JVM/标记复制.jpg)
#### 分代收集Generational Collection
分代收集就是根据对象的存活周期将内存分为新生代和老年代。
- **新生代**对象“朝生夕死”每次收集都有大量对象99%)死去,所以可以选择**标记-复制算法**,只需要付出少量对象的复制成本就可以完成每次垃圾收集
- **老年代**对象生存几率比较高存活对象比较多如果选择复制算法需要付出较高的IO成本而且没用额外的空间可以用于复制此时选择**标记-清除**或者**标记-整理**就比较合理
研究表明大部分对象可以分为两类:
- 大部分对象的生命周期都很短

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Loading…
Cancel
Save