- -Xms 堆内存的初始大小,默认为物理内存的1/64。 -Xmx 堆内存的最大大小,默认为物理内存的1/4~1/2。 -Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn。
-Xss 设置每个线程可使用的内存大小,即栈的大小。
在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。
常规做法: Xms=Xmx=物理内存的1/2。 Xmn=1/2Xmx
举个栗子
APP_START_JVM_OPTION:::-Djsse.enableSNIExtension=false -Xmx2G -Xms2G
-Xmn1G -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Dspring.config.location=classpath:application.properties,classpath:client.properties,classpath:client.properties
-D.log.config-location=classpath:application.properties -D.log.reload-scan-mills=40000 -D.log.enabled=true -D.server.web-environment=true -Duser.language=zh
异常:
如上参数设置不当,会导致fullgc频繁。
fullgc频繁的表现:CPU飙高、内存异常。也可能存在内存泄漏out of Memory。