zoukankan      html  css  js  c++  java
  • JVM运行参数

    一、三种参数类型

       1、标准参数:比较稳定,以后版本会保留

          -help

          -version

       2、-X参数(非标准参数)

          -Xint

          -Xcomp

       3、-XX参数(非标准参数,使用率较高)

          -XX:newSize

          -XX:+UseSerialGC

    二、标准参数

      一般都是很稳定的,在未来jvm版本中不会改变,可以使用java -help检索出所有的标准参数。

    三、-X参数

      非标准选项,如有更改,恕不另行通知。

      使用java -X检索出-X的参数。

       -Xint,-Xcomp,-Xmixed

        -Xint会强制JVM执行所有的字节码,会降低运行速度,通常低10倍或更多。

        -Xcomp与-Xint相反,会把所有的字节码编译成本地代码。

        -Xmixed是混合模式,是JVM的默认模式,推荐。

    四、-XX参数

      主要用于JVM的调优和debug操作。有两种,boolean类型和非boolean类型。

       boolean类型

        格式:-XX:[+-]<name> 表示启用或禁用<name>属性。

        如:-XX:+DisableExplicitGC 表示禁止用手动调用gc操作,也就是System.gc()无效。

       非boolean类型

        格式:-XX:<name>=<value> 表示<name>属性的值为<value>。

        如:-XX:NewRatio=1表示新生代和老年代的比值。

       -Xms 与 -Xmx参数

        -Xms512m:等价于-XX:InitialHeapSize=512m,设置初始堆内存为512M。

        -Xmx2048m:等价于-XX:MaxHeapSize=2048m,设置最大堆内存为2048M。

    java -Xms128m -Xmx256m  类

     五、查看jvm的运行参数

      1、运行java命令时打印参数

        添加参数-XX:+PrintFlagsFinal。

       2、查看正在运行的jvm参数 

        查看所有java进程:jps -l。

        查看某进程的jvm参数:jinfo -flags ${pid}  /  jinfo -flag <参数名> ${pid}。

    六、jvm的内存模型

      1、jdk1.7的堆内存模型

         Young年轻代

         Tenured老年代:主要保存生命周期长的对象,一般是一些老的对象。

         Perm永久代:主要保存class,method,file对象,这部分的空间一般不会溢出,除非加载了很多的类。

       2、jdk1.8的堆内存模型

        

           Young年轻代

           Tenured老年代

           元空间(占用系统内存) metaspace所占用的内存空间不是在虚拟机内部,而是在本地空间中,这也是与jdk1.7的永久代最大的区别。

        3、查看堆内存使用情况

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

            jstat [-命令选项] [进程id] [间隔时间/毫秒] [查询次数]

            例1:查看class加载统计

              C:Userslenovo>jstat -class 11976
              Loaded   Bytes      Unloaded   Bytes   Time
              4730       9436.1    0                 0.0       10.54

            说明:

              loaded:加载class的数量

              bytes:所占用空间大小

              unloaded:未加载占用空间

              time:时间

            例2:查看编译统计        

              C:Userslenovo>jstat -compiler 11976
              Compiled  Failed  Invalid  Time      FailedType    FailedMethod
              2970           0            0       13.28    0

            说明:

              compiled:编译数量

              failed:失败数量

              invalid:不可用数量

              time:时间

              failedType:失败类型

              failedMethod:失败的方法

            例3:垃圾回收统计        

                jstat -gc 11976
                S0C         S1C         S0U   S1U   EC             EU           OC   

                24576.0   25600.0   0.0     0.0     206336.0   54242.5   59392.0 

                                               OU           MC           MU           CCSC    CCSU     YGC    YGCT  FGC

                27371.7   27096.0    26635.1   3200.0   3028.4     17        0.210  2 

                FGCT    GCT 

                0.160     0.370

             说明:

              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:垃圾回收消耗总时间

    七、jmap的使用以及内存溢出分析

       1、查看内存使用情况

          jmap -heap 11976

        2、查看内存中对象数量及大小

          查看所有对象,包括活跃及非活跃:jmap -histo ${pid} | more

          查看活跃对象:jmap -histo:live ${pid} | more

            3.将内存使用情况dump到文件中

    #用法  b代表二进制
    jmap -dump:format=b,file=dumpFileName <pid>
    
    
    #示例
    jmap -dump:format=b,file=C://abc 1154

          4.通过jhat对dump文件进行分析

      

    #用法
    jhat -port <port> <file>
    
    
    #示例
    jhat -port 9999 C:abc
    浏览器访问localhost:9999查询
    点击OQL help,使用OQL查询,可以找出个个类对象的个数 比如:(select S from java.lang.String s where s.value.length>=1000)

        

       

     原文链接:https://www.cnblogs.com/hmxs/p/11754021.html

  • 相关阅读:
    iOS 上传appstore 一直卡在正在通过 App Store 进行鉴定(转)
    MySQL连接超时处理
    Windows上安装运行Spark
    NSQ端口关系以及注意事项
    C++ http服务
    C++ OpenSSL 之一:编译和使用
    C++ OpenSSL 之二:生成RSA文件
    C++ OpenSSL 之三:生成CSR文件
    C++ OpenSSL 之四:CER转换为PEM
    C++ OpenSSL 之五:生成P12文件
  • 原文地址:https://www.cnblogs.com/yangzhixue/p/11987416.html
Copyright © 2011-2022 走看看