Java8版本的Hotspot JVM,默認(rèn)情況下使用的是并行垃圾收集器(Parallel GC)。其 他廠商提供的JDK8基本上也默認(rèn)使用并行垃圾收集器。Java11的默認(rèn)垃圾收集器是什么? Java9之后,官方JDK默認(rèn)使用的垃圾收集器是G1。
常見的垃圾收集器有哪些? 常見的垃圾收集器包括:
串行垃圾收集器:‐XX:+UseSerialGC
并行垃圾收集器:‐XX:+UseParallelGC CMS
垃圾收集器:‐XX:+UseConcMarkSweepG G1
垃圾收集器: ‐XX:+UseG1GC
什么是串行垃圾收集? 就是只有單個(gè)worker線程來執(zhí)行GC工作。
什么是并行垃圾收集? 并行垃圾收集,是指使用多個(gè)GC worker線程并行地執(zhí)行垃圾收集,能充分利用多核 CPU的能力,縮短垃圾收集的暫停時(shí)間。除了單線程的GC,其他的垃圾收集器,比如PS,CMS, G1等新的垃圾收集器都使233用了多個(gè)線程來并行執(zhí)行GC工作。
什么是并發(fā)垃圾收集器? 并發(fā)垃圾收集器,是指在應(yīng)用程序在正常執(zhí)行時(shí),有一部分GC任務(wù),由GC線程在應(yīng)用線程一起并發(fā)執(zhí)行。例如CMS/G1的各種并發(fā)階段。
什么是增量式垃圾收集? 首先, G1的堆內(nèi)存不再單純劃分為年輕代和老年代,而是劃分為多個(gè)(通常是 2048個(gè)),可以存放對象的小塊堆區(qū)域(smaller heap regions)。 每個(gè)小塊,可能一會被定義成Eden區(qū),一會被指定為Survivor區(qū)或者Old區(qū)。這樣劃分之后,使得G1不必每次都去回收整個(gè)堆空間,而是以增量的方式來進(jìn)行處理:每次只處理一部分內(nèi)存塊,稱為此次 GC 的回收集(collection set)。 下一次GC時(shí)在本次的基礎(chǔ)上,再選定一定的區(qū)域來進(jìn)行回收。增量式垃圾收集的好處是大大降低了單次GC暫停的時(shí)間。