[讨论] 为什么会发生full gc?

zheng19851 2014-12-18
我拿我的eclipse在调优测试,看了下gc log,发现有如下的日志,感觉有点奇怪。eden,s0, s1以及old区和perm区都还空的很,怎么会发生full gc?求大神解答,谢谢

{Heap before GC invocations=5 (full 1):
 par new generation   total 118016K, used 3343K [0x044d0000, 0x0c4d0000, 0x0c4d0000)
  eden space 104960K,   3% used [0x044d0000, 0x04813d48, 0x0ab50000)
  from space 13056K,   0% used [0x0ab50000, 0x0ab50000, 0x0b810000)
  to   space 13056K,   0% used [0x0b810000, 0x0b810000, 0x0c4d0000)
 concurrent mark-sweep generation total 393216K, used 57118K [0x0c4d0000, 0x244d0000, 0x244d0000)
 concurrent-mark-sweep perm gen total 98304K, used 58231K [0x244d0000, 0x2a4d0000, 0x2a4d0000)
125.459: [Full GC (System) 125.459: [CMS: 57118K->56719K(393216K), 0.3278863 secs] 60462K->56719K(511232K), [CMS Perm : 58231K->58231K(98304K)], 0.3279524 secs] [Times: user=0.33 sys=0.00, real=0.33 secs] 
Heap after GC invocations=6 (full 2):
 par new generation   total 118016K, used 0K [0x044d0000, 0x0c4d0000, 0x0c4d0000)
  eden space 104960K,   0% used [0x044d0000, 0x044d0000, 0x0ab50000)
  from space 13056K,   0% used [0x0ab50000, 0x0ab50000, 0x0b810000)
  to   space 13056K,   0% used [0x0b810000, 0x0b810000, 0x0c4d0000)
 concurrent mark-sweep generation total 393216K, used 56719K [0x0c4d0000, 0x244d0000, 0x244d0000)
 concurrent-mark-sweep perm gen total 98304K, used 58231K [0x244d0000, 0x2a4d0000, 0x2a4d0000)
}


jvm参数
-Xms512m
-Xmx512m
-Xmn128m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-Xverify:none
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=85

pulsar_lxl 2014-12-18
加个参数试试:-XX:+DisableExplicitGC
zheng19851 2014-12-18
pulsar_lxl 写道
加个参数试试:-XX:+DisableExplicitGC

还真有可能!~
RednaxelaFX 2014-12-19
zheng19851 写道
pulsar_lxl 写道
加个参数试试:-XX:+DisableExplicitGC

还真有可能!~

不是可能的问题。楼主的GC日志里“[Full GC (System)”有System字样,说明是System.gc()触发的。-XX:+DisableExplicitGC可以禁用System.gc()触发GC,使这个调用变成什么都不做。

楼主要刨根问底的话就应该去找找哪里在调用System.gc()。这个可以用BTrace来做,脚本可以这样写:https://gist.github.com/rednaxelafx/2000950
zheng19851 2014-12-19
RednaxelaFX 写道
zheng19851 写道
pulsar_lxl 写道
加个参数试试:-XX:+DisableExplicitGC

还真有可能!~

不是可能的问题。楼主的GC日志里“[Full GC (System)”有System字样,说明是System.gc()触发的。-XX:+DisableExplicitGC可以禁用System.gc()触发GC,使这个调用变成什么都不做。

楼主要刨根问底的话就应该去找找哪里在调用System.gc()。这个可以用BTrace来做,脚本可以这样写:https://gist.github.com/rednaxelafx/2000950


额。。。怎么大的‘system’,居然没看到。。。。。。,你那个脚本之前已经看过了,谢了。
Global site tag (gtag.js) - Google Analytics