Java GC工作原理以及Minor GC、Major GC、Full GC简单总结
Java GC工作原理以及Minor GC、Major GC、Full GC简单总结 - 静静等_静静爱 - CSDN博客 https://blog.csdn.net/u012500848/article/details/51355404
Java 老矣,尚能饭否?-InfoQ https://www.infoq.cn/article/is-java-out-of-date/
GC 方面的进展
JDK 中主要的 GC 分类有:
-
Serial,单线程进行 GC,在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。
-
Parallel,相比 Serial 收集器,Parallel 最主要的优势在于使用多线程去完成垃圾清理工作,这样可以充分利用多核的特性,大幅降低 GC 时间。
-
CMS(Concurrent Mark-Sweep),是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。实现 GC 线程和应用线程并发工作,不需要暂停所有应用线程。
-
G1(Garbage First Garbage Collector),G 设计初衷是为了尽量缩短处理超大堆(大于 4GB)时产生的停顿。相对于 CMS 的优势而言是内存碎片的产生率大大降低。
目前在 JDK8 中以上 4 种 GC 都可以使用,而在 JDK9 中 G1 GC 会成为默认的垃圾收集器。
在 OpenJDK 方面,Redhat 开源并贡献了 Shenandoah GC。这是一种新的 Java 虚拟机 GC 算法,目标是利用现代多核 CPU 的优势,减少大堆内存在 GC 处理时产生的停顿时间。在使用大内存的应用上使用,如 >20G 堆空间。Fedora24 以后,官方源中的 OpenJDK 即带有 Shenandoah 算法,不过 JDK9 中还不会被加入。
无停顿的高性能 GC 就是 Azul 公司的 C4(Continuously Concurrent Compacting Collector) GC 了,但只提供商业版本使用。
另外 IBM J9 中 Balanced GC,表现也很出色,能够保证相对一致的暂停时间而避免破坏性的长时间停顿。Balanced GC 应用在各类 IBM 中间件产品之中。