一、JVM运行时参数

  1. JVM参数选项参数

    A. 标准参数选项:比较稳定,后续版本基本不会变化,以"-"开头,如"-server";

    B. -X参数选项:非标准化参数,比较稳定,但后续版本可能变更,以"-X"开头,如"-Xmx";

     C. -XX参数选项:非标准化参数,是使用最多的参数类型,不稳定,以"-XX"开头,主要用于开发和调试JVM,如"-XX:PrintGCDetails";

      Boolean类型:-XX:+<option>表示启用option属性,-XX:-<option>表示禁用option属性;

      key-value类型:又分-XX:<option>=<number>类型和-XX:<name>=<string>类型;

  2. 堆内存常见JVM参数

    A. -Xms<size>:表示Java堆区的起始内存大小,与"-XX:InitialHeapSize"等价,默认值为物理内存的1/64,通常将"-Xms"和"-Xmx"设置为相同的值,避免动态扩容带来的震荡问题;

    B. -Xmx<size>:表示Java堆区的最大内存大小,与"-XX:MaxHeapSize"等价,默认值为物理内存的1/4;

    C. -Xmn<size>:表示新生代空间的大小,这个与"-XX:NewRatio"有相同作用,官方推荐配置为整个堆大小的1/3,相当于同时配置-XX:NewSize和 -XX:MaxNewSize参数值;

    D. -XX:NewSize=size:表示新生代初始值大小;

    E.  -XX:MaxNewSize=size:表示新生代最大值大小;

    F. -XX:SurvivorRatio=size:表示新生代中Eden区和Survivor区的比例,默认值为8,实际值为6,关闭自适应机制后还是6,如果要为8,必须显示设置;

    G. -XX:-UserAdaptiveSizePolicy:表示关闭自适应的各区域大小比例;

    H. -XX:NewRatio=size:表示老年代和新生代的空间比值,默认值为2,即新生代占整个堆的1/3;

    I. -XX:PretenureSizeThreadshold=size:表示让大于此值的对象直接分配在老年代,单位为字节,只对Serial、ParNew收集器有效;

    J. -XX:MaxTenuringThreadshold=size:表示年轻代每次Minor GC后,还存活的对象年龄+1,当对象的年龄大于设置的值时就进入老年代,默认值15;

    K. -XX:+PrintTenuringDistribution:表示让JVM在每次MinorGC后打印出当前使用的Survivor中对象的年龄分布;

    L. -XX:TargetSurvivorRatio=size:表示MinorGC结束后Survivor区域中占用空间的期望比例;

    M. -XX:+HeapDumpOnOutMemoryError:表示在内存出现OOM的时候,把Heap转存Dump到文件以便后续分析;

    N.  -XX:+HeapDumpBeforeFullError:表示在出现FullGC之前,生成Heap转储文件;

    O. -XX:HeapDumpPath=path:指定Heap转存文件的存储路径;

     P.  -XX:OnOutOfMemoryError=sh:指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本;

  3. GC垃圾常见JVM参数

    A. -XX:+UseSerialGC:表示新生代使用Serial串行收集器和老年代使用Serial Old串行收集器;

    B.  -XX:+UseParNewGC:仅表示年轻代使用ParNew并行收集器;

    C.  -XX:ParallelGCThreads=N:限制年轻代回收线程数量,默认开启和CPU数据相同的线程数;

    D.  -XX:+UseParallelGC:新生代使用Parallel并行收集器,JDK8默认开启;

    E.  -XX:+UseParallelOldGC:老年代使用Parallel Old并行收集器,JDK8默认开启;

    F. -XX:GCTimeRatio=N:垃圾收集时间占总时间的比例,用来衡量吞吐量的大小;

    G. -XX:+UseConcMarkSweepGC:使用CMS收集器执行内存回收任务;

    H. -XX:ParallelCMSThreads=N:设置CMS的线程数量;

    I. -XX:+UserG1GC:使用G1收集器执行内存回收任务;

    J.-XX:MaxGCPauseMills=time:设置垃圾回收器期望达到的最大停顿时间(STW),但不能保证达到,默认为200ms,不要轻易改;

    K. -XX:+PrintGCDetails:在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配情况;

    L. -XX:+PrintHeapAtGC:梅一次GC前和GC后,都打印堆信息;

    M. -Xloggc:file:把GC日志写入到每一个文件中去,而不是打印到标准输出中;

    N. -XX:CMSlnitiatingOccupanyFration=n:设置堆内存使用率阈值;

    O. -XX:+UseCMSComapctAtFullCollection:用于指定在执行完FullGC后对内存空间进行压缩整理;

    P. -XX:CMSFullGCsBeforeCompaction=N:设置在执行多少次Full GC后对内存空间进行压缩整理;

 

二、查看命令

  1. jps(ava Process Status):查看正在运行的java进程;

    A. 语法:jps [options] [hostid],如jps -v代表显示JVM启动时参数;

  2. jstat:查看堆内存各部分的使用量,以及加载类的梳理;

    A. 语法:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数];

    B. 示例: jstat -gc pid:查看pid进程的GC情况;

  3. jinfo:实时查看和修改JVM配置参数;

    A. jinfo -flag NewRation pid:查看pid进程的新生代的比例;

  4. jmap:生成Java虚拟机的堆转储快照dump文件,可以查看finalize执行队列、Java堆和方法去的详细信息;

    A. 语法:jmap [option] pid,option选项如下

      -dump:<dump-options>:以hprof二进制格式转储java堆;

      -heap:打印java堆摘要;

    B. 示例:jmap -dump:live,format=b,file=/rhxy/heap.hprof 1,生成java虚拟机的堆转储快照dump文件;

    C. 使用场景:定位内存溢出原因;

    D. 在线分析内存工具:HeapHero;

  5. jhat:JDK自带堆分析工具;

  6. jstack:主要用来查看某个Java进程内的线程堆栈信息,根据堆栈信息可以定位到具体代码;

    A. 语法:jstack [option] pid,option选项如下

      -l:长清单,打印关于锁的额外信息;

    B. 示例:jstack -l 1,用来查看进程1的堆栈信息;

    C. 使用场景:JVM中定位最耗费CPU的线程。

 

三、GUC界面

  1. Jvivusal VM:

    A. 

  2. 

  3.