为什么GCG1仍然为此做一个“停止世界”?
因为G1并不是一个 无休止的 收集器,所以它只是一个 低暂停时间的 收集器。
我还认为-XX:MaxGCPauseMillis的默认值为200毫秒,为什么这个值违反29甚至50的倍数(请参见下文)?
是的,但这只是一个目标,而不是保证。许多事情可能导致它无法实现该目标。您有相当大的堆,这使事情变得更加困难,即失败更容易引起。
无论如何,GC调整过程始于通过以下方式启用详细的GC日志记录:
-Xloggc:<path to gc log file>-XX:+PrintAdaptiveSizePolicy-XX:+PrintGCDateStamps-XX:+PrintGCTimeStamps-XX:+PrintGCDetails
然后通过GCViewer运行生成的日志以获取总体概述,然后返回阅读单个日志条目(有关此主题的答案/博客文章很多),以找出可能导致最坏行为的原因。根据原因,可以尝试各种补救措施。
为了避免货物堆放,对跟踪垃圾收集器的总体工作方式和G1的工作应有一些一般性的了解。
我的应用程序有许多分配,可以很容易地称为“巨大分配”。
如果这确实是原因,那么当前的VM具有一些实验性选项可以更快地回收它们。
[Object Copy (ms): Min: 6964.1, Avg: 6973.0, Max: 6989.5, Diff: 25.3,Sum: 69730.4]
[Times: user=0.55 sys=46.58, real=7.02 secs]
这意味着在执行大部分应由内存访问而非系统调用组成的 *** 作时,它将花费大部分时间在内核中。因此,交换活动或透明的大页面很可能是可疑的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)