zoukankan      html  css  js  c++  java
  • JVM GC原理和监控

    1、JVM内存空间
    JVM内存空间,包含新生代空间(Young)和老年代空间(Old)。新生代空间又被分为2个部分,Eden区域和Survivous区域;Survivous区域分为2个板块,s0(To survivous)和s1(From Survivous);

    每个部分的具体作用:
    Eden区域:用来存放使用new或者newInstance等方式创建的对象,默认这些对象都是存放在Eden区,除非这个对象太大,或者超出了设定的阈值-XX:PretenureSizeThresold,这样的对象会被直接分配到Old区域。
    S0区域:用来存放垃圾minor GC时不能被回收的对象;
    S1区域:中转站
    老年代空间:用于存放s0区域空间不足无法保存的不能被回收的对象;

    2、JVM GC原理
    第一次young GC:
    在不断创建对象的过程中,当Eden区域被占满,此时会开始做Young GC也叫Minor GC,Young GC过程如下:
    1)将Eden区域不能被回收的对象,存储到s0区域;若s0区域被占满了,Eden区域剩下不能被回收的对象存放到old区域;
    2)将Eden区域全部清空,此时s0区域也是空的;
    3)将s0和s1切换标签,即把之前不能回收的对象转移到s1区域,保证s0区域为置空状态,供第二次young gc使用;

    第二次young gc:
    1)将Eden区域不能被回收的对象和s1中的对象,存储到s0区域;若s0区域被占满了,Eden区域剩下不能被回收的对象存放到old区域;
    2)将Eden区域全部清空,此时s0区域也是空的;
    3)将s0和s1切换标签,即把之前不能回收的对象转移到s1区域,保证s0区域为置空状态,供第二次young gc使用;

    以此类推,young gc的次数,默认为15次,可通过参数--XX:MaxTenuringThreshold=15 配置,当old区域被占满时,就会触发FULL GC 对整个空间进行清空处理;
    在发生FULL GC的时候,意味着JVM会安全的暂停所有正在执行的线程(Stop The World),来回收内存空间,在这个时间内,所有除了回收垃圾的线程外,其他有关JAVA的程序,代码都会静止,反映到系统上,就会出现系统响应大幅度变慢,卡机等状态。

    3、jvm gc监控
    监控命令:
    jstat -gcutil pid号 采样间隔(ms) 采样次数

    执行结果:

     S0:S0区域使用比例;

    S1:S1区域使用比例
    E:Eden区域使用比例
    O:Old区域使用比例
    P:永久代区域使用比例
    YGC:Young GC次数
    YGCT:Young GC消耗总时间
    FGC:Fu'll GC次数
    FGCT:Full GC总时间
    GCT:垃圾回收消耗总时间

  • 相关阅读:
    用友U8 | 【出纳管理】出纳日记账生成的凭证如何删除?
    转载--如何为chart上的点添加标注
    转载--跨域请求CORS和jsonp
    转载--闭包的使用场景
    转载--闭包的优缺点
    转载--对称加密与非对称加密
    转载--XSS漏洞原理和利用
    转载--强缓存与协商缓存
    转载--CSS常见布局
    转载--透过浏览器看HTTP缓存
  • 原文地址:https://www.cnblogs.com/wzl0916/p/13969167.html
Copyright © 2011-2022 走看看