zoukankan      html  css  js  c++  java
  • JVM的内存模型

    1.JDK1.7的堆内存模型

      

      Yong年轻代

        Yong区划分为三个部分,Eden区和两个大小严格相同的survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候,GC就会将存活的对象移到空闲的survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于survivor的对象将被移动到Tenured区间;

      Tenured老年代

        Tenured区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在Yong复制移动一定的次数以后,对象就会被转移到Tenured区,一般如果系统中用了application级别的缓存,缓存中的对象往往会被转移到这一区间;

      Perm永久区

        Perm主要保存class,method,field对象,这部分的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMeemoryError:PermGen space的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在Perm中,这种情况下,一般重新启动应用服务器可以解决问题;

    2.JDK1.8的堆内存模型

      

      JDK1.8的内存模型是由2部分组成,年轻代+年老代

        年轻代:Eden+2*survivor

        年老代:OldGen

      JDK1.8中变化最大的Perm区,用Metaspace(元数据空间)进行替换了;

      注意:Metaspace所占用的内存空间不是在虚拟机内部,而是在本地内存空间中,这也是1.7永久代最大的区别所在;

        

    3.为什么要废弃1.7中的永久代

      移除永久代是为融合HotSpot JVM与JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代;

      现实使用中,由于永久代内存经常不够用或发生内存泄露,爆出异常java.lang.OutOfMemoryError:PermGen;

      基于此,将永久代废弃,而改用元空间,改为了使用本地内存空间;

    4.使用jstat命令进行查看堆内存使用的情况

      jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令格式如下:

        jstat【-命令选项】【vmid】【间隔时间/毫秒】【查询次数】

      4.1 查看class加载统计

    E:北大青鸟Y2JVM>jps
    15956
    22292 RemoteMavenServer
    2676 Launcher
    17656 Bootstrap
    25228 Jps
    
    E:北大青鸟Y2JVM>jstat -class 17656
    Loaded  Bytes  Unloaded  Bytes     Time
      2940  2995.5        0     0.0       3.37

        说明:

          Loaded:加载class的数量

          Bytes:所占用空间大小

          Unloaded:未加载数量

          Bytes:未加载占用空间

          Time:时间

      4.2 查看编译统计

    E:北大青鸟Y2JVM>jstat -compiler 17656
    Compiled Failed Invalid   Time   FailedType FailedMethod
         602      0       0     0.15          0

        说明:

          Compiled:编译数量

          Failed:失败数量

          Invalid:不可用数量

          Time:时间

          FailedType:失败类型

          FailedMethod:失败的方法

      4.3 垃圾回收统计

    E:北大青鸟Y2JVM>jstat -gc 17656
     S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
    896.0  896.0   0.0   896.0   7744.0   2175.2   18960.0    11844.2   10752.0 10417.1  0.0    0.0       11    0.037   1      0.015    0.051

        可以指定打印的间隔和次数,每一秒中打印一次,共打印5次;

    E:北大青鸟Y2JVM>jstat -gc 17656 1000 5
     S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
    896.0  896.0   0.0   896.0   7744.0   2196.8   18960.0    11844.2   10752.0 10417.1  0.0    0.0       11    0.037   1      0.015    0.051
    896.0  896.0   0.0   896.0   7744.0   2196.8   18960.0    11844.2   10752.0 10417.1  0.0    0.0       11    0.037   1      0.015    0.051
    896.0  896.0   0.0   896.0   7744.0   2196.9   18960.0    11844.2   10752.0 10417.1  0.0    0.0       11    0.037   1      0.015    0.051
    896.0  896.0   0.0   896.0   7744.0   2196.9   18960.0    11844.2   10752.0 10417.1  0.0    0.0       11    0.037   1      0.015    0.051
    896.0  896.0   0.0   896.0   7744.0   2197.0   18960.0    11844.2   10752.0 10417.1  0.0    0.0       11    0.037   1      0.015    0.051

        说明:

          S0C:第一个survivor区的大小(KB)

          S1C:第二个survivor区的大小(KB)

          S0U:第一个survivor区的使用大小(KB)

          S1U:第二个survivor区使用大小(KB)

          EC:Eden区的大小(KB)

          EU:Eden区使用大小(KB)

          OC:Old区大小(KB)

          OU:Old使用大小(KB)

          MC:方法区大小(KB)

          MU:方法区使用大小(KB)

          CCSC:压缩类空间大小(KB)

          CCSU:压缩类空间使用大小(KB)

          YGC:年轻代垃圾回收次数

          YGCT:年轻代垃圾回收消耗时间

          FGC:老年代垃圾回收次数

          FGCT:老年代垃圾回收消耗时间

          GCT:垃圾回收消耗总时间

  • 相关阅读:
    重写System.IO.MemoryStream类, 实现LumiSoft.Net.POP3.Client单封邮件的下载进度显示
    获取页面来源URL ,源页面URL,Request.UrlReferrer为空的问题
    JavaScript BOM 随笔谈
    Android 端 博客园闪存——alpha版
    除余取模的算术变化特点,模的变化特点
    EF Code First 更新部分字段时 未更新字段的验证问题
    Android 端闪存 应用——alpha 2.0 版
    简化C#版Junit
    利用 Vs2012 编译MSOpenTech/Redis ——以服务方式运行Redis
    Android requires compiler compliance level 5.0. Please fix project properties.错误
  • 原文地址:https://www.cnblogs.com/wnwn/p/12401832.html
Copyright © 2011-2022 走看看