图解Java 垃圾回收机制

图解Java 垃圾回收机制_第1张图片
Marking标记

标记就是把需要回收的对象标志出来;
图解Java 垃圾回收机制_第2张图片
Normal Deletion 清除

标记-清除是最基础的回收算法。它有两个问题。首先是效率问题,标记和清除这两个过程,都需要全部扫描一遍;另一个问题就是空间问题,标志清除之后会产生大量不连续的内存碎片,当碎片太多的时候,就无法周到足够的连续的内存,不得不提前触发另一次的垃圾收集动作。
图解Java 垃圾回收机制_第3张图片
Deletion with Compacting 标记-整理

另一种回收算法是 标记-整理算法。标记的步骤和标记-清除算法一样,但是后续步骤不是直接对对象进行删除,而是让存活的对象都向一端移动,然后之际清理掉端边界以外的内存。
图解Java 垃圾回收机制_第4张图片
JVM Generations

分代收集算法。这种算法是根据对象存活周期的不同将内存分成好几块。一般就是把Java 分成新生代(Young Generation)和老年代(Old Generation)。然后根据各个年代采用最适当的收集算法。在新生代采用了类似于复制算法。而老年代因为对象存活率高,没有额外空间对它担保,所以必须采用“ 标记-清理”或者“ 标记-整理”算法来进行回收。
图解Java 垃圾回收机制_第5张图片
image.png

图解Java 垃圾回收机制_第6张图片
image.png

图解Java 垃圾回收机制_第7张图片
image.png

图解Java 垃圾回收机制_第8张图片
image.png

图解Java 垃圾回收机制_第9张图片
image.png

图解Java 垃圾回收机制_第10张图片
image.png

图解Java 垃圾回收机制_第11张图片
image.png

图解Java 垃圾回收机制_第12张图片
image.png

原文:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html#t3

你可能感兴趣的:(图解Java 垃圾回收机制)