通过命令行参数 来指定 GC 线程数。 其默认值为CPU内核数。

    可以通过下面的任意一组命令行参数来指定并行GC:

    并行垃圾收集器适用于多核服务器,主要目标是增加吞吐量。因为对系统资源的有效使用,能达到更高的吞吐量:

    • 在GC期间, 所有 CPU 内核都在并行清理垃圾, 所以暂停时间更短
    • 在两次GC周期的间隔期, 没有GC线程在运行,不会消耗任何系统资源

    另一方面, 因为此GC的所有阶段都不能中断, 所以并行GC很容易出现长时间的卡顿. 如果延迟是系统的主要目标, 那么就应该选择其他垃圾收集器组合。

    1. 2015-05-26T14:27:40.915-0200: 116.115: [GC (Allocation Failure)
    2. [PSYoungGen: 2694440K->1305132K(2796544K)]
    3. 9556775K->8438926K(11185152K)
    4. , 0.2406675 secs]
    5. [Times: user=1.77 sys=0.01, real=0.24 secs]
    6. 2015-05-26T14:27:41.155-0200: 116.356: [Full GC (Ergonomics)
    7. [PSYoungGen: 1305132K->0K(2796544K)]
    8. [ParOldGen: 7133794K->6597672K(8388608K)] 8438926K->6597672K(11185152K),
    9. [Metaspace: 6745K->6745K(1056768K)]
    10. , 0.9158801 secs]

    第一次GC事件表示发生在年轻代的垃圾收集:


    >

    所以,可以简单地算出, 在垃圾收集之前, 堆内存总使用量为 9,556,775K。 其中年轻代为 2,694,440K。同时算出老年代使用量为 6,862,335K. 在垃圾收集之后, 年轻代使用量减少为 1,389,308K, 但总的堆内存使用量只减少了 1,117,849K。这表示有大小为 271,459K 的对象从年轻代提升到老年代。

    Full GC(完全GC)

    学习了并行GC如何清理年轻代之后, 下面介绍清理整个堆内存的GC日志以及如何进行分析:


    同样,和 Minor GC 的区别是很明显的 —— 在此次GC事件中, 除了年轻代, 还清理了老年代和 Metaspace. 在GC事件前后的内存布局如下图所示: