可以先读这篇国外的文章,https://www.cubrid.org/blog/understanding-java-garbage-collection
图1 ParallelGC
图2 CMS
一直困惑ParaellGC与CMS的区别,今天看到这俩张图,突然觉得俩者的区别在于:
- ParaellGC是Stop the application,之后多个线程去收集可回收的内存,之后执行回收操作,关键点是:确认哪些内存可以回收、之后再回收,俩个操作都在Stop application后才执行的。
- CMS也是Stop the application,但是:初始标记,确认哪些内存可以被回收是与业务线程同时执行的;之后是重新标记阶段,这个阶段会Stop the application;之后是回收阶段,这个阶段是和业务线程同时执行着的。
CMS的也可以结合着看看这篇:https://www.cnblogs.com/Leo_wl/p/5393300.html