java 虚拟机 GC 学习笔记一
java 虚拟机常见 GC:
一、串行 GC(Serial GC)/ParNewGC
-XX:+UseSerialGC 配置串行 GC
串行 GC 对年轻代使用 mark-copy(标记-复制) 算法,对老年代使用 mark-sweep-compact(标记-清除-整理)算法。两者都是单线程的垃圾收集器,不能进行并行处理,所以都会触发全线暂停(STW),停止所有的应用线程。因此这种 GC 算法不能充分利用多核 CPU。不管有多少 CPU 内核,JVM 在垃圾收集时都只能使用单个核心。CPU 利用率高,暂停时间长。简单粗暴,就像老式的电脑,动不动就卡死。
该选项只适合几百 MB 堆内存的 JVM,而且是单核 CPU 时比较有用。
-XX:+USeParNewGC 改进版本的 Serial GC,可以配合 CMS 使用。
二、并行 GC(Parallel GC)
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseParallelGC -XX:+UseParallelOldGC
年轻代和老年代的垃圾回收都会触发 STW 事件。
在年轻代使用 标记-复制(mark-copy)算法,在老年代使用 标记-清除-整理(mark-sweep
compact)算法。
-XX:ParallelGCThreads=N 来指定 GC 线程数, 其默认值为 CPU 核心数。
并行垃圾收集器适用于多核服务器,主要目标是增加吞吐量。因为对系统资源的有效使用,能达到
更高的吞吐量:
• 在 GC 期间,所有 CPU 内核都在并行清理垃圾,所以总暂停时间更短;
• 在两次 GC 周期的间隔期,没有 GC 线程在运行,不会消耗任何系统资源。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/1bafbc82ce034d68966bddd09】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论