25. 小师妹学JVM之:JVM中的Safepoints
简介
java程序员都听说过GC,大家也都知道GC的目的是扫描堆空间,然后将那些标记为删除的对象从堆空间释放,以提升可用的堆空间。今天我们会来探讨一下隐藏在GC背后的一个小秘密Safepoints。
GC的垃圾回收器
小 师妹:F师兄,GC的垃圾回收器的种类为什么会有这么多呀?使用起来不是很麻烦。并且我听说CMS在JDK9zhong已经被废弃了。
小师妹,这么多垃圾回收器实际是在JVM的发展过程中建立起来的,在之前的文章中,我们讲到了目前的GC回收器有这样几种。
- 基于分代技术的回收器
Concurrent mark sweep (CMS) ,CMS是mark and swap的升级版本,它使用多个线程来对heap区域进行扫描,从而提升效率。
由于CMS的参数复杂性和性能问题,CMS已经在JDK9中被废弃了。
Serial garbage collection,使用单一的线程来进行垃圾回收操作,其好处就是不需要和其他的线程进行交互。如果你是单核的CPU,那么最好就是选择Serial garbage collection,因为你不能充分利用多核的好处。同样的它也常常用在比较小型的项目中。
Parallel garbage collection,如果你是多核处理器,那么Parallel GC可能是你的选择。
Parallel GC是JDK8中的默认GC。而在JDK9之后, G1是默认的GC。
G1 garbage collection,G1=Garbage First,它是为替换CMS而生的,最早出现在java7中。
G1将heap区域划分成为多个更小的区域,每个小区域都被标记成为young generation 或者old generation。从而运行GC在更小的范围里运行,而不是影响整个heap区域。
- 非基于分代技术的回收器
Z Garbage Collection,ZGC是一个可扩展的,低延迟的GC。ZGC是并发的,而且不需要停止正在运行的线程。
ZGC是在JDK11中引入的。
当然还有正在研发中的其他GC。