正常的Full GC

正常的Full GC

正常的Full GC其实是整个gc过程包括ygc和cms gc(这里说的是真正意义上的Full GC,还有些场景虽然调用Full GC的接口,但是并不会都做,有些时候只做ygc,有些时候只做cms gc)都是由VMThread来执行的,因此整个时间是ygc+cms gc的时间之和,其中CMS GC是上面提到的foreground式的,因此整个过程会比较长,也是我们要避免的

  // Stop-the-world full collection

  collect(cause, n_gens() - 1);

#endif

}

}

bool GenCollectedHeap::should_do_concurrent_full_gc(GCCause::Cause cause) {

 return UseConcMarkSweepGC &&

    ((cause == GCCause::_gc_locker && GCLockerInvokesConcurrent) ||

    (cause == GCCause::_java_lang_system_gc &&

ExplicitGCInvokesConcurrent));

}

并行的Full GC

并行Full GC也通样会做YGC和CMS GC,但是效率高就搞在CMS GC是走的background的,整个暂停的

过程主要是YGC+CMS_initMark+CMS_remark几个阶段

堆外内存常配合使用System GC

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容