JVM年轻代GC实验-GC日志解析与jstat解析

1.JVM参数设置

#jvm参数配置
-Xms25m #堆内存最小25m
-Xmx25m #堆内存最大值25m
-Xmn10m #年轻代大小
-Xss1m  #线程栈大小
-XX:+UseParNewGC #使用ParNew垃圾回收器
-XX:+PrintGCDetails #打印GC信息
-XX:+PrintGCDateStamps # 打印gc时间戳

在这里插入图片描述

2.年轻代垃圾回收测试代码

publicstatic voidmain(String[] args)throwsInterruptedException {
useParNewCollector();
}

publicstatic voiduseParNewCollector()throwsInterruptedException {
int[] arr;
for(inti = 0; i < 1000; i++) {
        arr =new int[100 * 1024];
        System.out.println("----------第"+i+"次执行----------");
        Thread.sleep(500);
    }
}

3. 控制台垃圾回收信息

// 年轻代垃圾回收信息
2021-04-28T10:26:58.708+0800:  #打印日志
[GC (Allocation Failure)   #执行垃圾回收的原因是内存分配失败
2021-04-28T10:26:58.708+0800:
 [ParNew: 7893K->624K(9216K),  
# 7893k是年轻代已经使用的空间 
# 624是回收后剩余的对象,会放入survivor区
# 9216k 是年轻代 eden区+一个s区的总和
0.0011493 secs]  #年轻代垃圾回收总耗时
7893K->624K(25600K),  # 25600k是堆的总大小
0.0012549 secs]  # gc总耗时
[Times: 
user=0.00 # 用户态CPU执行时间(不包含挂起)
sys=0.00, #内核态CPU执行时间 (不包含挂起)
real=0.00 secs # 实际执行时间
]

3. 内存变化信息监控

# 在idea的terminal中执行jps找到执行main方法的类
jps

在这里插入图片描述

使用jstat执行
jstat -gc 29196 1000 100
# 29196 标识pid
#1000 是指的1秒打印1次
# 后面的100是指的总共打印100次

具体jps与jstat的使用请参考官方文档:https://docs.oracle.com/javase/7/docs/technotes/tools/index.html

# 当前单位kb
S0C # survivor0区的大小
S1C # survivor1区的大小
SOU # survivor0区的使用大小
S1U # survivor1区已使用的大小
EC # eden的大小
EU # eden已使用大小
OC # old区的大小
OU # old区已使用大小
MC # 元数据区大小
MU # 元数据区已使用内存大小
CCSC # 当前可用压缩空间大小
CCSU # 当前已使用压缩空间大小
YGC # 系统迄今为止进行young gc的次数
YGCT # 进行Young GC的总时长
FGC # 系统迄今为止进行full gc的次数
FGCT # 系统迄今为止进行full gc的总耗时
GCT # 所有gc的总耗时

#jstat 信息
S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
1024.0 1024.0  0.0    0.0    8192.0   960.6    16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   1760.6   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   2560.7   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   3360.7   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   4160.7   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   4960.8   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   5760.8   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   6560.8   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   7360.8   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   8160.9   16384.0     626.7    2368.0 218.8   0.0    0.0        5    0.003   0      0.000    0.003
1024.0 1024.0  0.0    0.0    8192.0   960.7    16384.0     626.7    2368.0 218.8   0.0    0.0        6    0.004   0      0.000    0.004

从上面信息可以得出以下结论

1.s0与s1都是空,说明den区的垃圾全部进行回收了

2.根据EU的变化,可以得出每秒EU新增800k的对象

3.数组里的每个值都是int型,占4字节,数组长度为100*1024。总大小为400k

4.而每次创建对象后sleep500毫秒,那么一秒会创建2个,刚好800k

注意:对象除了包含数据大小外,还有结构大小,指针大小等,所以实际大小一般都会比计算出来的要大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值