JVM内存参数设置

发布时间 2024-01-13 00:35:44作者: 程序马2023


Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里):
java ‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M ‐jar microservice‐eureka‐server.jar
关于元空间的JVM参数有两个:-XX:MetaspaceSize=N和 -XX:MaxMetaspaceSize=N

  • -XX:MaxMetaspaceSize: 设置元空间最大值, 默认是-1, 即不限制, 或者说只受限于本地内存大小。

  • -XX:MetaspaceSize: 指定元空间触发Fullgc的初始阈值(元空间无固定初始大小), 以字节为单位,默认是21M,达到该值就会触发full gc进行类型卸载, 同时收集器会对该值进行调整: 如果释放了大量的空间, 就适当降低该值; 如果释放了很少的空间, 那么在不超过-XX:MaxMetaspaceSize(如果设置了的话) 的情况下, 适当提高该值。这个跟早期jdk版本的-XX:PermSize参数意思不一样,-XX:PermSize代表永久代的初始容量。

  • --Xss:设置线程的栈大小,--Xss参数只影响每个线程的堆栈大小,而不会影响整个堆内存的大小。-Xss设置越小count值越小,说明一个线程栈里能分配的栈帧就越少,但是对JVM整体来说能开启的线程数会更多。

  • --Xms:初始堆内存大小,通过调整-Xms参数,可以影响程序的启动性能。增加-Xms的值可以使得程序在启动时更快地分配内存,从而提高程序的启动性能。但是,如果设置的值过大,可能会导致机器的可用内存减少,从而影响其他程序的性能。

  • ‐Xmx:最大堆内存大小,当程序运行时,JVM会根据需要动态地分配和回收内存。但是,如果程序需要使用的内存量超过了-Xmx所设置的值,JVM就会抛出OutOfMemoryError异常。

  • -Xmn:新生代大小,调整-Xmn参数可以帮助优化程序的性能,特别是对于内存敏感的应用程序。通过减小-Xmn的值,可以减少新生代的内存使用量,从而减少垃圾收集的频率。但是,如果-Xmn设置得过大,可能会导致频繁的Full GC,从而影响程序的性能。