Oracle JDK的GC日志分析
2016-05-04 00:00
585 查看
摘要: Oracle JDK的GC日志分析
参考:http://blog.csdn.net/yxc135/article/details/12137663
首先,给出一个日志输出的例子:
参数设置为:
-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M
参数解释:
-XX:+PrintGCDetails 启用日志
-XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio可以起作用
-XX:SurvivorRatio=8 设置Eden:Survivior=8
-XX:NewSize=10M -XX:MaxNewSize=10M 设置整个新生代的大小为10M
默认垃圾收集器为:Parallel Scavenge
输出结果为:
[GC [PSYoungGen: 4423K->320K(9216K)] 4423K->320K(58880K), 0.0011900 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[Full GC (System) [PSYoungGen: 320K->0K(9216K)] [ParOldGen: 0K->222K(49664K)] 320K->222K(58880K) [PSPermGen: 2458K->2456K(21248K)], 0.0073610 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 9216K, used 491K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
eden space 8192K, 6% used [0x00000000ff600000,0x00000000ff67af50,0x00000000ffe00000)
from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
to space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
ParOldGen total 49664K, used 222K [0x00000000c5800000, 0x00000000c8880000, 0x00000000ff600000)
object space 49664K, 0% used [0x00000000c5800000,0x00000000c58378a0,0x00000000c8880000)
PSPermGen total 21248K, used 2466K [0x00000000c0600000, 0x00000000c1ac0000, 0x00000000c5800000)
object space 21248K, 11% used [0x00000000c0600000,0x00000000c0868b48,0x00000000c1ac0000)
前半段分析:
GC (minor )日志
![](http://static.oschina.net/uploads/space/2016/0504/152045_jQPj_2342410.jpg)
Full GC 日志
![](http://static.oschina.net/uploads/space/2016/0504/152102_gdwM_2342410.jpg)
后半段分析:
![](http://static.oschina.net/uploads/img/201605/04151556_6OXG.jpg)
![](http://static.oschina.net/uploads/img/201605/04151556_TWnJ.jpg)
对照上面的图,GC日志中的PSYoungGen(PS是指Parallel Scavenge)为Eden+FromSpace,而整个YoungGeneration为Eden+FromSpace+ToSpace。
我们设置的新生代大小为10240K,这包括9216K大小的PSYoungGen和1024K大小的ToSpace。其中,PSYoungGen中的Eden:FromSpace为8:1,
这包括8192K的Eden和1024K的FromSpace。
关于老年代和永久代的输出比较简单,不再详述。
更详细描述参见官方文档:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
最后注意,如果新生代的空间不能刚好按比例划分,则可能有一定的误差。比如,将上述的参数中SurvivorRatio改为10,则输出如下:
[GC [PSYoungGen: 4439K->320K(9408K)] 4439K->320K(59072K), 0.0010120 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (System) [PSYoungGen: 320K->0K(9408K)] [ParOldGen: 0K->222K(49664K)] 320K->222K(59072K) [PSPermGen: 2458K->2456K(21248K)], 0.0095710 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 9408K, used 514K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
eden space 8576K, 6% used [0x00000000ff600000,0x00000000ff680b78,0x00000000ffe60000)
from space 832K, 0% used [0x00000000ffe60000,0x00000000ffe60000,0x00000000fff30000)
to space 832K, 0% used [0x00000000fff30000,0x00000000fff30000,0x0000000100000000)
ParOldGen total 49664K, used 222K [0x00000000c5800000, 0x00000000c8880000, 0x00000000ff600000)
object space 49664K, 0% used [0x00000000c5800000,0x00000000c58378a0,0x00000000c8880000)
PSPermGen total 21248K, used 2466K [0x00000000c0600000, 0x00000000c1ac0000, 0x00000000c5800000)
object space 21248K, 11% used [0x00000000c0600000,0x00000000c0868b48,0x00000000c1ac0000)
可以看到新生代的相关数值是有一定误差的。
参考:http://blog.csdn.net/yxc135/article/details/12137663
首先,给出一个日志输出的例子:
参数设置为:
-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M
参数解释:
-XX:+PrintGCDetails 启用日志
-XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio可以起作用
-XX:SurvivorRatio=8 设置Eden:Survivior=8
-XX:NewSize=10M -XX:MaxNewSize=10M 设置整个新生代的大小为10M
默认垃圾收集器为:Parallel Scavenge
输出结果为:
[GC [PSYoungGen: 4423K->320K(9216K)] 4423K->320K(58880K), 0.0011900 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[Full GC (System) [PSYoungGen: 320K->0K(9216K)] [ParOldGen: 0K->222K(49664K)] 320K->222K(58880K) [PSPermGen: 2458K->2456K(21248K)], 0.0073610 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 9216K, used 491K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
eden space 8192K, 6% used [0x00000000ff600000,0x00000000ff67af50,0x00000000ffe00000)
from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
to space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
ParOldGen total 49664K, used 222K [0x00000000c5800000, 0x00000000c8880000, 0x00000000ff600000)
object space 49664K, 0% used [0x00000000c5800000,0x00000000c58378a0,0x00000000c8880000)
PSPermGen total 21248K, used 2466K [0x00000000c0600000, 0x00000000c1ac0000, 0x00000000c5800000)
object space 21248K, 11% used [0x00000000c0600000,0x00000000c0868b48,0x00000000c1ac0000)
前半段分析:
GC (minor )日志
![](http://static.oschina.net/uploads/space/2016/0504/152045_jQPj_2342410.jpg)
Full GC 日志
![](http://static.oschina.net/uploads/space/2016/0504/152102_gdwM_2342410.jpg)
后半段分析:
![](http://static.oschina.net/uploads/img/201605/04151556_6OXG.jpg)
![](http://static.oschina.net/uploads/img/201605/04151556_TWnJ.jpg)
对照上面的图,GC日志中的PSYoungGen(PS是指Parallel Scavenge)为Eden+FromSpace,而整个YoungGeneration为Eden+FromSpace+ToSpace。
我们设置的新生代大小为10240K,这包括9216K大小的PSYoungGen和1024K大小的ToSpace。其中,PSYoungGen中的Eden:FromSpace为8:1,
这包括8192K的Eden和1024K的FromSpace。
关于老年代和永久代的输出比较简单,不再详述。
更详细描述参见官方文档:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
最后注意,如果新生代的空间不能刚好按比例划分,则可能有一定的误差。比如,将上述的参数中SurvivorRatio改为10,则输出如下:
[GC [PSYoungGen: 4439K->320K(9408K)] 4439K->320K(59072K), 0.0010120 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (System) [PSYoungGen: 320K->0K(9408K)] [ParOldGen: 0K->222K(49664K)] 320K->222K(59072K) [PSPermGen: 2458K->2456K(21248K)], 0.0095710 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 9408K, used 514K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
eden space 8576K, 6% used [0x00000000ff600000,0x00000000ff680b78,0x00000000ffe60000)
from space 832K, 0% used [0x00000000ffe60000,0x00000000ffe60000,0x00000000fff30000)
to space 832K, 0% used [0x00000000fff30000,0x00000000fff30000,0x0000000100000000)
ParOldGen total 49664K, used 222K [0x00000000c5800000, 0x00000000c8880000, 0x00000000ff600000)
object space 49664K, 0% used [0x00000000c5800000,0x00000000c58378a0,0x00000000c8880000)
PSPermGen total 21248K, used 2466K [0x00000000c0600000, 0x00000000c1ac0000, 0x00000000c5800000)
object space 21248K, 11% used [0x00000000c0600000,0x00000000c0868b48,0x00000000c1ac0000)
可以看到新生代的相关数值是有一定误差的。
相关文章推荐
- .NET垃圾回收器(GC)原理浅析
- 深入理解PHP原理之Session Gc的一个小概率Notice
- 浅析Java中的GC垃圾回收器的意义及与GC的交互
- 浅谈关于Java的GC垃圾回收器的一些基本概念
- Android垃圾回收机制及程序优化System.gc
- 从JVM的内存管理角度分析Java的GC垃圾回收机制
- Java中垃圾回收器GC对吞吐量的影响测试
- 全面解析Java中的GC与幽灵引用
- Java堆空间占满的gc日志实例
- 大话JMM
- java.lang.OutOfMemoryError: GC overhead limit exce
- java性能优化 –gc日志收集与分析
- java7中G1垃圾收集器使用和流程总结
- java 虚拟机--新生代与老年代GC
- Erlang并发机制 – 垃圾回收
- JVM gc
- JDK5.0中JVM堆模型、GC垃圾收集详细解析
- java的finalize方法的认识 及GC相关机制
- 深入理解ReferenceQueue GC finalize Reference