配置方法:
- Eclipse配置
- Intellij IDEA配置
- Run/Debugg configuration内 VM options处配置
- Tomcat配置
- springBoot
- 直接使用java -jar 启动
- java -Xmx2g -Xms2g -jar xxx.jar
- 使用linux服务启动
- jar包的shell脚本内 会加载jar包同目录下的 ${jarName}.conf文件内的JAVA_OPTS
JAVA_OPTS="-Xmx2g -Xms2g "
- jar包的shell脚本内 会加载jar包同目录下的 ${jarName}.conf文件内的JAVA_OPTS
- 直接使用java -jar 启动
内存相关
- -Xms1g 设置堆的最小空间为1GB。
- -Xmx4g 设置堆的最大空间为4GB。
- -Xmn1g 设置新生代空间为1GB。
- -XX:NewSize=256m 设置新生代最小空间为256MB。
- -XX:MaxNewSize=256m 设置新生代最大空间为256MB。
- -XX:PermSize=1g 设置永久代最小空间为1GB。
- -XX:MaxPermSize=1g 设置永久代最大空间为1GB。
- -Xss1m 设置每个线程的栈大小为1MB,此设置关系到能够支持的最大线程数量 和 调用栈深度(如1M深度约为3w+)。
jdk1.8取消了永生代,所以相关Perm配置仅在1.8之前的版本有效。
GC相关
- -XX:-PrintGC 每次垃圾回收时 打印相关信息
- -XX:-PrintGCDetails 每次垃圾回收时 打印详细信息
- -XX:-PrintGCTimeStamps 打印每次垃圾回收的时间戳
- -XX:-DisableExplicitGC 禁用显式调用System.gc();
- -XX:-UseSerialGC 使用串行化GC
- -XX:-UseParallelGC 使用并行化GC
- -XX:-UseG1GC 使用G1GC
- -XX:-UseConcMarkSweepGC 使用CMSGC
一般选择具体的GC后,会有一些特有的参数需要配置,参照垃圾回收算法、垃圾回收器
其他
- -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/log/app.hprof 内存溢出时,导出堆内存快照 java内存溢出分析
- -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5080,suspend=n 远程Debug
- -XX:+PrintCommandLineFlags 启动时 打印jvm配置参数
- -XX:MaxTenuringThreshold=20 设置老年代寿命阈值为20(即在年轻代经过20次垃圾回收后,依然存活 则进入老年代)
最后附上 我在项目中常用的配置方案
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5080,suspend=n -Xmx4g -Xms4g
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/
-XX:+PrintCommandLineFlags -XX:-PrintGCDetails
正式环境会去掉远程Debug的配置