zoukankan      html  css  js  c++  java
  • 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

    image.png
    - 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
    image.png
    我们可以看到,在 before gc前,对象都存在于eden区,
    image.png
    在 after gc之后,我们可以看到,一部分对象存在于from区了,说明我们的调整是有效的

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

  • 相关阅读:
    struts2 上传文件
    Struts2文件下载
    关于maven:调整你的maven的jdk版本为 xxxx
    倒计时显示
    [JSP] c:forEach 如何输出序号
    BaseServlet 继承 httpServlet
    验证码
    Javascript中Base64编码解码的使用实例
    五、javaScript基础&DOM(二)
    四、javaScript基础&DOM(一)
  • 原文地址:https://www.cnblogs.com/fkxuexi/p/9574981.html
Copyright © 2011-2022 走看看