码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-02 18:42:56      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:memory   system   load   最小   class   ogg   erb   abi   技术分享   

一、Trace 跟踪参数

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

2、打印GC详细信息
-XX:+PrintGCDetails
1
 
1
-XX:+PrintGCDetails
3、打印CG发生的时间戳
-XX:+PrintGCTimeStamps
1
 
1
-XX:+PrintGCTimeStamps
4、指定GC log的位置,以文件输出
-Xloggc:log/gc.log
1
 
1
-Xloggc:log/gc.log
5、每次一次GC后,都打印堆信息
-XX:+PrintHeapAtGC
1
 
1
-XX:+PrintHeapAtGC
6、监控类的加载
-XX:+TraceClassLoading
1
 
1
-XX:+TraceClassLoading
7、按下Ctrl+Break后,打印类的信息。分别显示:序号、实例数量、总大小、类型
技术分享图片
-XX:+PrintClassHistogram
1
 
1
-XX:+PrintClassHistogram


二、堆的分配参数

1、指定最大堆和最小堆
-Xmx –Xms
1
 
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");
10
 
1
-Xmx20m -Xms5m  运行代码:
2
System.out.print("Xmx=");
3
System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024+"M");
4
5
System.out.print("free mem=");
6
System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024+"M");
7
8
System.out.print("total mem=");
9
System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024+"M");
10
2、设置新生代大小
-Xmn
1
 
1
-Xmn
3、新生代(eden+2*s)和老年代(不包含永久区)的比值。
     4 表示 新生代:老年代=1:4,即年轻代占堆的1/5
-XX:NewRatio
1
 
1
-XX:NewRatio
4、设置两个Survivor区和eden的比(s0/s1区,或者叫from/to区,幸存区)
      8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10
-XX:SurvivorRatio
1
 
1
-XX:SurvivorRatio
5、OOM时导出堆到文件
-XX:+HeapDumpOnOutOfMemoryError
1
 
1
-XX:+HeapDumpOnOutOfMemoryError
6、导出OOM的路径(堆dump的时候放置的位置)
-XX:+HeapDumpPath
1
 
1
-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
 
1
-XX:OnOutOfMemoryError
2
3
// %p 是当前线程的pid
4
-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p
5
// 当程序OOM时,会执行脚本printstack.bat,如果脚本里写
6
// D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt   在D:/a.txt中将会生成线程的dump
7
// 可以在OOM时,发送邮件,甚至是重启程序
8
8、堆的分配参数总结

a)、根据实际事情调整新生代和幸存代的大小
官方推荐新生代占堆的3/8
幸存代占新生代的1/10
在OOM时,记得Dump出堆,确保可以排查现场问题


三、永久区

1、设置永久区的初始空间和最大空间。他们表示,一个系统可以容纳多少个类型
-XX:PermSize  -XX:MaxPermSize
1
 
1
-XX:PermSize  -XX:MaxPermSize
堆空间实际占用非常少。但是永久区溢出 一样抛出OOM
如果堆空间没有用完也抛出了OOM,有可能是永久区导致的




四、栈的分配
1、栈空间分配。
     通常只有几百K。决定了函数调用的深度。(会影响递归的次数)
    每个线程都有独立的栈空间
    局部变量、参数 分配在栈上
-Xss
1
 
1
-Xss


















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

标签:memory   system   load   最小   class   ogg   erb   abi   技术分享   

原文地址:https://www.cnblogs.com/churao/p/8494165.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!