Java垃圾收集 - 一个FULL GC的发生

时间:2015-08-21 20:14:53

标签: java garbage-collection

我一开始只获得一个FULL GC。任何人都知道为什么这个FULL GC正在发生。详细的GC日志粘贴在下面。

Java HotSpot(TM) 64-Bit Server VM (24.79-b02) for linux-amd64 JRE (1.7.0_79-b15), built on Apr 10 2015 11:34:48 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
Memory: 4k page, physical 12028696k(8289940k free), swap 0k(0k free)
CommandLine flags: -XX:+AggressiveOpts -XX:+AlwaysCompileLoopMethods -XX:+AlwaysPreTouch -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSParallelRemarkEnabled -XX:-CMSPrecleaningEnabled -XX:+DoEscapeAnalysis -XX:InitialHeapSize=2621440000 -XX:MaxHeapSize=2621440000 -XX:MaxNewSize=1572864000 -XX:MaxTenuringThreshold=1 -XX:NewSize=1572864000 -XX:OldPLABSize=16 -XX:ParallelGCThreads=8 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseFastAccessorMethods -XX:+UseParNewGC 
2015-08-19T16:13:33.068+0100: 101.480: [GC2015-08-19T16:13:33.068+0100: 101.480: [ParNew: 1228800K->153600K(1382400K), 0.2028820 secs] 1228800K->183823K(2406400K), 0.2029750 secs] [Times: user=0.86 sys=0.01, real=0.20 secs] 
2015-08-19T16:24:52.983+0100: 781.395: [GC2015-08-19T16:24:52.983+0100: 781.395: [ParNew: 1382400K->117199K(1382400K), 0.1762650 secs] 1412623K->292710K(2406400K), 0.1763560 secs] [Times: user=0.88 sys=0.00, real=0.18 secs] 

.........................

2015-08-19T16:34:49.144+0100: 1377.556: [GC2015-08-19T16:34:49.144+0100: 1377.556: [ParNew: 1234692K->7088K(1382400K), 0.0146160 secs] 1520104K->293793K(2406400K), 0.0147080 secs] [Times: user=0.08 sys=0.00, real=0.02 secs] 
2015-08-19T16:34:52.364+0100: 1380.776: [GC2015-08-19T16:34:52.364+0100: 1380.776: [ParNew: 1235888K->5535K(1382400K), 0.0112050 secs] 1522593K->293080K(2406400K), 0.0113010 secs] [Times: user=0.05 sys=0.01, real=0.01 secs] 
2015-08-19T16:34:55.607+0100: 1384.018: [GC2015-08-19T16:34:55.607+0100: 1384.018: [ParNew: 1234335K->6833K(1382400K), 0.0117390 secs] 1521880K->295111K(2406400K), 0.0118300 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
2015-08-19T16:34:58.699+0100: 1387.110: ****[Full GC2015-08-19T16:34:58.699+0100: 1387.110: [CMS: 288277K->201657K(1024000K), 0.8300700 secs] 1485407K->201657K(2406400K), [CMS Perm : 33686K->33656K(33920K)], 0.8387470 secs] [Times: user=1.10 sys=0.03, real=0.83 secs]**** 
2015-08-19T16:35:01.927+0100: 1390.338: [GC2015-08-19T16:35:01.927+0100: 1390.338: [ParNew: 1228800K->27726K(1382400K), 0.0202150 secs] 1430457K->229384K(2406400K), 0.0203230 secs] [Times: user=0.12 sys=0.01, real=0.02 secs] 
2015-08-19T16:42:07.420+0100: 1815.832: [GC [1 CMS-initial-mark: 514340K(1024000K)] 522144K(2406400K), 0.0052180 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
2015-08-19T16:42:07.426+0100: 1815.837: [CMS-concurrent-mark-start]
2015-08-19T16:42:07.749+0100: 1816.161: [CMS-concurrent-mark: 0.324/0.324 secs] [Times: user=1.16 sys=0.14, real=0.32 secs] 
2015-08-19T16:42:07.750+0100: 1816.161: [GC[YG occupancy: 255614 K (1382400 K)]2015-08-19T16:42:07.750+0100: 1816.161: [Rescan (parallel) , 0.1178140 secs]2015-08-19T16:42:07.868+0100: 1816.279: [weak refs processing, 0.0001000 secs]2015-08-19T16:42:07.868+0100: 1816.279: [scrub string table, 0.0010920 secs] [1 CMS-remark: 514340K(1024000K)] 769955K(2406400K), 0.1190980 secs] [Times: user=0.74 sys=0.01, real=0.12 secs] 
2015-08-19T16:42:07.869+0100: 1816.281: [CMS-concurrent-sweep-start]
2015-08-19T16:42:08.560+0100: 1816.971: [CMS-concurrent-sweep: 0.690/0.691 secs] [Times: user=2.18 sys=0.35, real=0.69 secs] 
2015-08-19T16:42:08.560+0100: 1816.972: [CMS-concurrent-reset-start]
2015-08-19T16:42:08.563+0100: 1816.975: [CMS-concurrent-reset: 0.003/0.003 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
2015-08-19T16:42:09.191+0100: 1817.602: [GC2015-08-19T16:42:09.191+0100: 1817.602: [ParNew: 1235443K->7655K(1382400K), 0.0144670 

我想知道,

1)上面显示的FULL GC是否会停止工作,因为看起来它不是年轻一代的GC?假设这个FULL GC仅适用于终身制和永久性生成。

2)FULL GC显示CMS。这是同一个并发垃圾收集的并发标记扫描算法吗?如果是,那么为什么它没有显示FULL GC中的所有步骤,因为它在并行标记扫描算法运行时显示(粘贴在上面)

3)永久性CMS GC在这里是否正常?为什么FULL GC在这里只触发了一个

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

问题是 - 有一个FULL GC需要更多时间~800 msecc,之后没有看到完整的GC。

我明白了。通过使-XX:PermSize等于-XX:MaxPermSize,消除了这个FULL GC。