1.参数分类
java启动参数共分为三类
- 标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
- 非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
- 非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
2.核心参数
参数名称 | 内存区域 | 说明 |
---|---|---|
-Xms | 堆内存 | Java堆内存的大小 |
-Xmx | 堆内存 | Java堆内存的最大大小 |
-Xmn | 堆内存 | Java堆内存中的新生代大小 老年代内存大小=堆内存-新生代 |
-XX:PermSize -XX:MetaspaceSize | 方法区 | 永久代大小 |
-XX:MaxPermSize -XX:MaxMetaspaceSize | 方法区 | 永久代最大大小 |
-Xss | 栈内存 | 每个线程的栈内存大小 |
-Xms和-Xmx,分别用于设置Java堆内存的刚开始的大小,以及允许扩张到的最大大小。对于这对参数,通常来说,都会设置为完全一样的大小。
-Xmn,这个参数也是很常见的,他用来设置Java堆内存中的新生代的大小,堆内存大小-新生代内存大小就是给老年代的内存大小。
-XX:PermSize和 -XX:MaxPermSize,分别限定了永久代大小和永久代的最大大小,JDK 1.8以后的版本,这俩参数被替换为了-XX:MetaspaceSize和-XX:MaxMetaspaceSize。
-Xss,这个参数限定了每个线程的栈内存大小。每个线程都有一个自己的虚拟机栈,然后每次执行一个方法,就会将方法的栈帧压入线程的栈里,方法执行完毕,那么栈帧就会从线程的栈里出栈。
其他参数介绍说明
参数名称 | 参数说明 |
---|---|
-XX:NewRatio | 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代) -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。 |
-XX:SurvivorRatio | Eden区与Survivor区的大小比值 |
-XX:MaxTenuringThreshold | 垃圾最大年龄:如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率 该参数只有在串行GC时才有效。 |
-XX:+DisableExplicitGC | 禁止调用System.gc();但jvm的gc仍然有效 |
-XX:+UseConcMarkSweepGC | 对老生代采用并发标记交换算法进行GC |
-XX:+CMSParallelRemarkEnabled | 降低标记停顿 |
-XX:LargePageSizeInBytes=128m | 内存页的大小不可设置过大, 会影响Perm的大小 |
-XX:+UseFastAccessorMethods | 原始类型的快速优化 |
-XX:+UseCMSInitiatingOccupancyOnly | 使用手动定义初始化定义开始CMS收集 |
-XX:CMSInitiatingOccupancyFraction=70 | 使用cms作为垃圾回收使用70%后开始CMS收集 |
-XX:+HeapDumpOnOutOfMemoryError | 当首次遭遇OOM时导出此时堆中相关信息 |
-XX:+PrintGCDetails | 每次GC时打印详细信息 |
-XX:+PrintGCDateStamps | 打印每次GC的时间戳 |
-Xloggc:/data/log/gc.log | GC日志路径 |
3.设置JVM参数
- 本地调试:在启动类里面,右键,选择
Edit xxx
,会弹出一个启动类编辑界面,以IDEA为例:
在VM options
栏输入对于的参数即可。如:
-Xmx1024m -Xms1024m -Xmn512m -XX:MetaspaceSize=256m -Xss256k
-Xms之类的参数直接后面跟上你要设置的内存大小(以m为单位)。但是-XX:PermSize这种格式的参数,需要跟一个“=”符号。
- jar包启动
nohup java -server -Xmx2048m -Xms2048m -Xmn768m -XX:MetaspaceSize=256m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/log/gc.log -jar ExamApp.jar >>/dev/null 2>&1 &
Tomcat
启动
修改bin目录下的catalina.sh,在文件最前面添加一行配置即可。
set JAVA_OPTS=-Xms2048m -Xmx2048m -Xss1024K -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m