java - GC日志问题

标签 java performance garbage-collection

GC日志中的(bold)是什么意思:

81296.997: [GC 7431462K->6692307K(8283776K), 1.0975224 secs]
82337.956: [GC 7531219K->6800788K(8283776K), 1.1563326 secs]
83338.712: [GC 7639700K->6898225K(8283776K), 1.0868988 secs]
83339.816: [GC 6899724K(8283776K), 0.1227785 secs]
83351.437: [GC 6911811K(8283776K), 0.4253903 secs]
84363.941: [GC 1859011K->1125589K(8283776K), 0.9137798 secs]
85319.780: [GC 1964501K->1217720K(8283776K), 0.8500309 secs]

我希望在大约 95% 的 Xmx 后日志中出现完整,但我看到的是上面的内容。我的设置如下:

-d64  
-Xss384k  
-Xms8192m
-Xmx8192m  
-XX:ParallelGCThreads=12  
-XX:PermSize=512m  
-XX:MaxPermSize=512m  
-XX:NewSize=1024m  
-XX:MaxNewSize=1024m  
-XX:SurvivorRatio=8  
-Xnoclassgc  
-XX:+DisableExplicitGC  
-verbose:gc  
-XX:+UseParNewGC  
-XX:+CMSParallelRemarkEnabled  
-XX:+UseConcMarkSweepGC

让我重新表述一下我的问题:我知道整行的含义,但我的问题是为什么粗线不同,它是什么类型的 GC?我不认为这是年轻一代 GC,如果不是那么这是什么样的 GC?

最佳答案

这看起来很奇怪。粗体字显然属于年轻代 GC。从没有空间被释放的事实以及他们花费的时间很短的事实来看,他们也是失败的尝试,这可能是因为老年代没有足够的空间来保留所有需要的对象。

我觉得奇怪的是下一行:

84363.941: [GC 1859011K->1125589K(8283776K), 0.9137798 secs]

在释放四分之三的内存之间发生了什么?这可能是并行 GC 的日志记录导致的异常,但有些地方不对。

您可以尝试添加 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution以获得更清晰的 View 。 (当然要结合 -Xloggc:<log file> 选项。)

关于java - GC日志问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344727/

相关文章:

java - ImageJ - 累积直方图和直方图

java - 在 Java 中实现缓存以实现读取性能且完全不驱逐

python - list_iterator 垃圾收集它消耗的值吗?

java - java上的ffmpeg权限被拒绝

java - 如何遍历 ArrayList of Objects 的对象 ArrayList?

c# - C#中的快速数组复制

performance - 我应该使用 SmartGWT 还是 Vaadin?

java - JVM 内存问题

java - Spring Singleton Scope 是如何进行垃圾回收的?

java - 如何测试数字为零的java