Golang 的三色标记清除算法和 Java 的 ZGC 都是用于垃圾回收的算法,它们都有一些相似点和不同点。以下是它们的不同点:
Golang 的三色标记清除算法是标记-清除算法的变体,三色标记清除-混合写屏障,而 Java 的 ZGC 是一种基于读屏障的算法。
- Golang 的三色标记清除-混合写屏障,几乎没有STW,常规gc时间在10ms以内,10万级对象的gc时间优化后在20ms左右。但是暂停时间相比JDK16以上的ZGC仍然有差距。而 Java 的 ZGC 可以在更短的停顿时间内回收大量内存。
- Golang 的三色标记清除算法可以进行增量回收,这意味着可以在程序执行的同时回收一部分内存,而 Java 的 ZGC 可以进行全量回收,将GC 信息保存在了染色指针上,在停顿时间内更快的回收所有垃圾。
- Golang的垃圾回收算法的缺点:
- 1.Mark Assist 停顿时间过长
- 2.Sweep 停顿时间过长
- Java的垃圾回收算法的缺点:
- 1.浮动垃圾