Jvm知识学习(三)-常用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后,打印类的信息:

–分别显示:序号、实例数量、总大小、类型
   
   二,堆的分配参数

   -Xmx –Xms
   指定最大堆和最小堆
  -Xmn
  设置新生代大小
  -XX:NewRatio
  新生代(eden+2*s)和老年代(不包含永久区)的比值
  4 表示 新生代:老年代=1:4,即年轻代占堆的1/5
  -XX:SurvivorRatio
  设置两个Survivor区和eden的比
  8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10
 
  例1:

     -Xmx20m -Xms20m -Xmn1m  -XX:+PrintGCDetails

     -1,没有触发GC

     -2,全部分配在老年代

     例2:

     -Xmx20m -Xms20m -Xmn15m  -XX:+PrintGCDetails

    1. 没有触发 GC
    2. 部分配在 eden
    3. 老年代没有使用
  
     例3:

     -Xmx20m -Xms20m –Xmn7m-XX:+PrintGCDetails

     1.进行了2次新生代GC

     2.s0 s1 太小要老年代担保

     
     例4:

     -Xmx20m -Xms20m -Xmn7m   -XX:SurvivorRatio=2 -XX:+PrintGCDetails

     
     例5:

     -Xmx20m -Xms20m -XX:NewRatio=1  

     -XX:SurvivorRatio=3 -XX:+PrintGCDetails

     
     -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时,发送邮件,甚至是重启程序

  总结:
  根据实际事情调整新生代和幸存代的大小
  官方推荐新生代占堆的3/8
  幸存代占新生代的1/10 
  在OOM时,记得Dump出堆,确保可以排查现场问题
  
  永久区参数分配:
  -XX:PermSize -XX:MaxPermSize
  设置永久区的初始空间和最大空间
   他们表示,一个系统可以容纳多少个类型
  

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

示例:栈内存,分配越大,递归调用的次数越多(跟函数的局部变量占用的内存也有关系)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值