1.标记-清除算法
标记:遍历所有的GC Roots 然后将所有可达对象标记为存活对象;
清除:遍历堆中的所有对象,然后将没有标记的对象清除。
2.标记整理算法
标记:遍历所有的GC Roots 然后将所有可达对象标记为存活对象;
整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收。
3.复制算法
将原有的内存空间一分为二,每次只用其中的一块,在垃圾回收时,将正在使用的对象复制到另外一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾回收。
4.分代算法
年轻代-老年代-元数据区(之前永久代)
1个Eden区和2个Survivor区(分别叫from和to)默认比例为8:1:1,一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次GC后,如果仍然存活,将会被移到Survivor区。在Survivor区中每熬过一次Minor GC,年龄就会增加1岁,当它的年龄增加到16时,就会被移动到老年代中。
年轻代:复制算法
老年代: 标记整理算法
相关文章
- 02-05Log4j2异步日志 与 垃圾回收
- 02-0501 垃圾回收机制
- 02-05Python之美[从菜鸟到高手]--Python垃圾回收机制及gc模块详解
- 02-05聊聊Dotnet的垃圾回收
- 02-05垃圾回收
- 02-05JVM—引用计数和可达性分析算法(存活性判断)
- 02-05垃圾回收机制的过程和原理
- 02-05JVM如何判断对象能否被回收
- 02-05Java垃圾回收与内存
- 02-05JVM 垃圾回收GC Roots Tracing