一次 gc 日志分析

/**
* -XX:NewSize=5242880
* -XX:MaxNewSize=5242880
* -XX:InitialHeapSize=10485760
* -XX:MaxInitialHeapSize=10485760
* -XX:SurvivorRatio=8
* -XX:PretenureSizeThreshold=10485760
* -XX:+UseParNewGC
* -XX:+UseConcMarkSweepGC
* -XX:+PrintGCDetails
* -XX:+PrintGCTimeStamps
* -Xloggc:gc.log
* @param args
*/
public static void main(String[] args) {
/**CommandLine flags: -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=5242880 -XX:NewSize=5242880 -XX:OldPLABSize=16 -XX:PretenureSizeThreshold=10485760 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:SurvivorRatio=8 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
0.133: [GC (Allocation Failure) 0.133: [ParNew: 3826K->471K(4608K), 0.0010332 secs] 3826K->1497K(9728K), 0.0011436 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap
par new generation total 4608K, used 3705K [0x00000007bf600000, 0x00000007bfb00000, 0x00000007bfb00000)
eden space 4096K, 78% used [0x00000007bf600000, 0x00000007bf928670, 0x00000007bfa00000)
from space 512K, 92% used [0x00000007bfa80000, 0x00000007bfaf5f98, 0x00000007bfb00000)
to space 512K, 0% used [0x00000007bfa00000, 0x00000007bfa00000, 0x00000007bfa80000)
concurrent mark-sweep generation total 5120K, used 1026K [0x00000007bfb00000, 0x00000007c0000000, 0x00000007c0000000)
Metaspace used 3197K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 352K, capacity 388K, committed 512K, reserved 1048576K
**/

    // 先说下我们设置的 gc 参数.
    // 1.新生代大小为 5M(Eden 区 4M,s0 为 0.5M)
    // 2.堆内存为 10M
    // 3.大对象进入老年代阈值为 10M
    // 4.新生代使用 ParNew
    // 5.老年代使用 CMS
    // 6.打印详细 gc 日志
    // 7.打印每次 gc 发生的时间
    // 8.将 gc 日志写入文件.

    // 第一个 0.133 是分配失败的时间.
    // 第二个 0.133 是新生代发生 gc 的时间,使用 ParNew 新生代收集器,总量为 4608->4.5M
    // 使用量为 3826 -> 3.7M 左右. 一开始在新生代创建了 3 个 1M 的对象,然后失去引用,变成垃圾.
    // 有人会问,不应该是 3M 吗?那个 1M 只是数据部分,JVM 还会创建其他的东西,比如对象头等数据结构.
    // 471K 是 gc 剩下的大小.
    // 0.0010332 本次 gc 耗时.
    // 后面那个 3826 是堆内存的变化
    int ONE_M = 1024 * 1024;
    byte[] array1 = new byte[ONE_M];
    array1 = new byte[ONE_M];
    array1 = new byte[ONE_M];

    array1 = null;

    byte[] array2 = new byte[2 * ONE_M];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值