gc日志一般关注什么_jvm系列之-gc日志查看

在上一篇中我们介绍的有参数的设置,那我们要了解不同的参数对于程序的影响和对于调优的影响,这个时候我们就需要查看gc日志来看我们设置的参数是否合理,这一章节中我们就来查看gc日志

一、新生代和老年代的比值对性能的影响

Map map = new HashMap<>();

for (int i =0; i <10; i++) {

byte[] b = new byte[1024*1024];

map.put(i,b);

}

System.out.println(map);

-Xmx10M -Xms10M -verbose:gc -XX:+PrintGCDetail -XX:PrintHeapAtGC -Xloggc:ggc.log

- 1、我们首先来看一个问题:yong = eden+survivor from + survivor to的,但是 2048+512+512 > 2560

解释如下:新生代的可用空间:eden+survivor from,是的 to不属于可用空间,在一次MinorGC之后,eden和from中还活着的对象会被全部复制到to中,然后from和to的角色互换,即可用空间只是eden+from

2、第二个问题,我们可以看到在 before gc前,from和to都是 0%,而old区则为85%,为何新生代的from和to都是0%呢?

解释如下:我们每次产生的对象的大小都是1m的对象,当对象过大时,会直接进入老年代

3、有很多的博文都是介绍XX:SurvivorRation的默认值为8,我的上一篇博文中也是这样来写的,但是我们可以看到这里的比值很显然不是8,

解释如下:在我们不断上调Xmx和Xms的时候,这个比值近似8

针对问题2,我们现在做一些改动,现在只是生成10M大小的对象,单个对象的大小是1M,显然我们是需要调整Xmn和SurvivorRation的比例的

二、设置Xmn和SurvivorRation的比值

-Xmx10M -Xms10M -Xmn6M -XX:SurvivorRatio=4 -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC -Xloggc:gcc.log

即:堆区20m ,新生代6M,Eden:surviror = 4 ,即eden=4096:from=1024:to=1024

我们可以看到,在 before gc前,对象都存在于eden区,

在 after gc之后,我们可以看到,一部分对象存在于from区了,说明我们的调整是有效的

下一篇我们将会讨论一下jvm的垃圾回收机制,这一篇估计会比较麻烦 ,但是阅读垃圾回收的策略,你会发现其实挺好玩的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值