深入JVM《三》 JVM常用配置参数

一、Trace 跟踪参数

1、打印GC的简要信息
-verbose:gc
-XX:+PrintGC

 

 
2、打印GC详细信息
-XX:+PrintGCDetails

 

3、打印CG发生的时间戳
-XX:+PrintGCTimeStamps

 

 
 
4、指定GC log的位置,以文件输出
-Xloggc:log/gc.log

 

 
 
5、每次一次GC后,都打印堆信息
-XX:+PrintHeapAtGC

 

 
 
6、监控类的加载
-XX:+TraceClassLoading

 

 
 
7、按下Ctrl+Break后,打印类的信息。分别显示:序号、实例数量、总大小、类型
-XX:+PrintClassHistogram

 

 
 
 
 

二、堆的分配参数

1、指定最大堆和最小堆
-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");

 

 
 
2、设置新生代大小
-Xmn

 

 
 
3、新生代(eden+2*s)和老年代(不包含永久区)的比值。
     4 表示 新生代:老年代=1:4,即年轻代占堆的1/5
-XX:NewRatio

 

 
 
4、设置两个Survivor区和eden的比(s0/s1区,或者叫from/to区,幸存区)
      8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10
-XX:SurvivorRatio

 

 
5、OOM时导出堆到文件
-XX:+HeapDumpOnOutOfMemoryError

 

6、导出OOM的路径(堆dump的时候放置的位置)
-XX:+HeapDumpPath

 

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

// %p 是当前线程的pid
-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p
// 当程序OOM时,会执行脚本printstack.bat,如果脚本里写
// D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt   在D:/a.txt中将会生成线程的dump
// 可以在OOM时,发送邮件,甚至是重启程序

 

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

 

堆空间实际占用非常少。但是永久区溢出 一样抛出OOM
如果堆空间没有用完也抛出了OOM,有可能是永久区导致的
 
 
 
 
四、栈的分配
1、栈空间分配。
     通常只有几百K。决定了函数调用的深度。(会影响递归的次数)
    每个线程都有独立的栈空间
    局部变量、参数 分配在栈上
-Xss

 

 

 

posted @ 2018-03-02 17:06  刍荛采葑菲  阅读(224)  评论(0编辑  收藏  举报