zoukankan      html  css  js  c++  java
  • 常用JVM配置参数

    Trace跟踪参数

    名称  描述  说明

     -verbose:gc 或者

     -XX:+printGC

     可以打印GC的简要信息 [GC 4790K->374K(15872K), 0.0001606 secs]
    [GC 4790K->374K(15872K), 0.0001474 secs]
    [GC 4790K->374K(15872K), 0.0001563 secs]
    [GC 4790K->374K(15872K), 0.0001682 secs]
     -XX:+PrintGCDetails  打印GC详细信息  
     -XX:+PrintGCTimeStamps  打印CG发生的时间戳

     [GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374K(15872K), 0.0002232 secs]

    [Times: user=0.00 sys=0.00, real=0.00 secs]

     

    -Xloggc:log/gc.log

     

    指定GC log的位置,以文件输出
    帮助开发人员分析问题

     
     -XX:+PrintHeapAtGC  每次一次GC后,都打印堆信息  
     -XX:+TraceClassLoading  监控类的加载  

    [Loaded java.lang.Object from shared objects file]
    [Loaded java.io.Serializable from shared objects file]
    [Loaded java.lang.Comparable from shared objects file]
    [Loaded java.lang.CharSequence from shared objects file]
    [Loaded java.lang.String from shared objects file]
    [Loaded java.lang.reflect.GenericDeclaration from shared objects file]
    [Loaded java.lang.reflect.Type from shared objects file]

     -XX:+PrintClassHistogram  按下Ctrl+Break后,打印类的信息  

    num #instances #bytes class name
    ----------------------------------------------
    1: 890617 470266000 [B
    2: 890643 21375432 java.util.HashMap$Node
    3: 890608 14249728 java.lang.Long
    4: 13 8389712 [Ljava.util.HashMap$Node;
    5: 2062 371680 [C
    6: 463 41904 java.lang.Class


    分别显示:序号、实例数量、总大小、类型

      

     

    堆的分配参数

     名称  描述  说明
     -Xmx –Xms  指定最大堆和最小堆  

    -Xmx20m -Xms5m 运行代码:
    System.out.print("Xmx=");
    System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024+"M");

    System.out.print("free mem=");
    System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024+"M");

    System.out.print("total mem=");
    System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024+"M");

    结果:

    Xmx=19.375M
    free mem=4.342750549316406M
    total mem=4.875M

     -Xmn  设置新生代大小  官方推荐新生代占堆的3/8
     -XX:NewRatio  新生代(eden+2*s)和老年代(不包含永久区)的比值  4 表示 新生代:老年代=1:4,即年轻代占堆的1/5 ,默认比例为1:2
     -XX:SurvivorRatio  设置两个Survivor区和eden的比  8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10
     -XX:+HeapDumpOnOutOfMemoryError  OOM时导出堆到文件  
     -XX:+HeapDumpPath  导出OOM的路径

     -Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError

     -XX:HeapDumpPath=d:/a.dump

    Vector v=new Vector();
    for(int i=0;i<25;i++)
    v.add(new byte[1*1024*1024]);

     -XX:OnOutOfMemoryError  在OOM时,执行一个脚本  

    "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“
    当程序OOM时,在D:/a.txt中将会生成线程的dump
    可以在OOM时,发送邮件,甚至是重启程序

    printstack.bat

    D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt

     -XX:PermSize  -XX:MaxPermSize  设置永久区的初始空间和最大空间  使用CGLIB等库的时候,可能会产生大量的类,这些类,有可能撑爆永久区导致OOM

    栈大小分配

    -Xss
    通常只有几百K
    决定了函数调用的深度
    每个线程都有独立的栈空间
    局部变量、参数 分配在栈上

    举例:

    public class TestStackDeep {
        private static int count=0;
        public static void recursion(long a,long b,long c){
            long e=1,f=2,g=3,h=4,i=5,k=6,q=7,x=8,y=9,z=10;
            count++;
            recursion(a,b,c);
        }
        public static void main(String args[]){
            try{
                recursion(0L,0L,0L);
            }catch(Throwable e){
                System.out.println("deep of calling = "+count);
                e.printStackTrace();
            }
        }
    }


    递归调用
    -Xss128K
    deep of calling = 701
    java.lang.StackOverflowError

    
    

    -Xss256K
    deep of calling = 1817
    java.lang.StackOverflowError

  • 相关阅读:
    underscore utility
    underscore objects
    underscore functions
    underscore arrays
    underscore collections
    underscore概况
    in操作符
    类数组对象 实参对象arguments
    JAVA和C++的区别
    MySQL学习笔记(转自掘金小册 MySQL是怎样运行的,版权归作者所有!)
  • 原文地址:https://www.cnblogs.com/qq99514925/p/10928292.html
Copyright © 2011-2022 走看看