跳转至

Java 虚拟机垃圾收集器

时间: 2020-11-09 17:04:04

Java 虚拟机垃圾收集器#

垃圾收集器#

Serial#

新生代,单线程。使用内存占用小的场景。200M以内。

ParNew#

新生代,Serial 多线程版本。使用与内存占用大的场景。

只能结合 CMS 使用。

Parallel Scavenge#

新生代,多线程、标记复制,关注吞吐量(即垃圾回收时间占虚拟机运行时间的百分比)。

  • -XX:MaxGCPauseMillis 停顿时间。
  • -XX:GCTimeRatio 垃圾回收所占时间比率。
  • -XX:+UseAdaptiveSizePolicy 开关,打开之后可以自动调节,新生代、老年代以及新生代 Eden、Survivor 空间大小。

Serial Old#

老年代,单线程、标记整理。

Parallel Old#

老年代,多线程,标记整理。

CMS#

老年代,多线程、标记清除。并发,低停顿收集器。但是效果一般。

G1#

新生代和老年代,多线程,

  • -XX:G1HeapRegionSize 区块大小, 1~32M,2的n次幂。
  • -XX:MaxGCPauseMillis 最大收集停顿时间,默认200毫秒。

指定垃圾收集器#

  • -XX:+UseSerialGC Serial+Serial Old
  • -XX:+UseParNewGC ParNew+Serial Old,从JDK1.8开始被废弃。
  • -XX:+UseConcMarkSweepGC ParNew+CMS+Serial Ol
  • -XX:+UseParallelGC Parallel Scavenge+Serial Old(PS Mark Sweep)
  • -XX:+UseParallelOldGC Parallel Scavenge+Parallel Old
  • -XX:+UseG1GC G1

查看垃圾收集日志#

JDK1.9 之前

* `-XX:+PrintGC` 简要GC * -XX:+PrintGCDetails 详细GC

JDK1.9 以及之后

  • -Xlog:gc 简要GC
  • -Xlog:gc* 详细GC