CMD java
//1 非标准参数配置
-Xms1024m
//指定jvm堆的初始大小,默认为物理内存的1/64,最小为1M;可以指定单位,比如k、m,若不指定,则默认为字节。
-Xmx1024m
//指定jvm堆的最大值,默认为物理内存的1/4或者1G,最小为2M;单位与-Xms一致。
-Xmn480m
//JVM中年轻态的大小 年轻态比老年态为1/1 持久态最好为64M 老年态为480 FULLCG次数会较少 但是每次FULLCG时间会较长
-Xss256K
//单个线程栈的大小 一般默认512k
//2 非stable参数
-XX:PermSize=64M
//持久态的大小 JDK8是另一个参数设置持久态
-XX:MaxPermSize=64M
//设置持久代最大值为100m,默认为xms的1/8。MaxPermSize过小会导致:java.lang.OutOfMemoryError: PermGen space
//32位Linux和64位Linux好像不一样,64位系统似乎只要配置MaxTenuringThreshold参数。
#-XX:MaxTenuringThreshold=20
//MaxTenuringThreshold=0就是去掉了救助空间 MaxTenuringThreshold去掉,这样即没有暂停又不会有promotoin failed,而且更重要的是,年老代和永久代上升非常慢(因为好多对象到不了年老代就被回收了),所以CMS执行频率非常低,好几个小时才执行一次
-XX:SurvivorRatio=4
//Eden区与Survivor区的大小比值4/1
/**适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。
响应时间优先的应用:年轻代大小选择
尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。
响应时间优先的应用:年老代大小选择
年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:
**/
-XX:+UseConcMarkSweepGC
//对老生代采用并发标记交换算法进行GC
-XX:+CMSParallelRemarkEnabled
// 降低标记停顿
-XX:CMSFullGCsBeforeCompaction=0
//由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此参数设置运行n次FullGC以后对内存空间进行压缩、整理。
-XX:CMSInitiatingOccupancyFraction=70
//表示年老代空间到70%时就开始执行CMS,确保年老代有足够的空间接纳来自年轻代的对象。 满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion 内存太低不适应
-XX:+UseCMSCompactAtFullCollection
//使用并发收集器时,开启对年老代的压缩,failed
-XX:+DisableExplicitGC
//禁止System.gc(),免得程序员误调用gc方法影响性能;
-XX:+UseParNewGC
//对年轻代采用多线程并行回收,这样收得快;
//3 日志打印信息
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/usr/aaa/dump
-Xloggc:/usr/local/mylog/heap_trace.txt
-XX:+PrintGCTimeStamps
-XX:+PrintGC
-XX:+PrintHeapAtGC
-XX:+PrintGCDetails
-Duser.timezone=Asia/Shanghai
-jar yourjarName.jar
JVM调优配置及参数说明
最新推荐文章于 2024-07-31 10:30:00 发布