Java提供了多平台版本的JDK,其中JVM版本也不同,通过不同版本的JVM可以将java代码编译成对应其系统的可执行语言
JVM内存结构模型 JVM内存参数
-XX:PermSize永久代的初始容量。
-Xss:每个线程的栈大小
-Xms:设置堆的初始可用大小
-Xmx:设置堆的最大可用大小
-Xmn:新生代大小
-XX:NewRatio:默认为2,表示新生代占年老代的1/2,占整个堆内存的1/3。
-XX:SurvivorRatio:默认为8,表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存。
-XX:MaxMetaspaceSize: 设置元空间最大值, 默认-1, 即不限制, 只受限于物理内存大小。
-XX:MetaspaceSize: 指定元空间首次触发Fullgc的阈值(元空间无固定初始大小), 以字节为单位,默认是21M左右,达到该值就会触发full gc进行类型卸载,同时收集器会对该值进行调整。
-Xss设置越小,一个线程栈里能分配的栈帧就越少,但对JVM整体来说能开启的线程数会更多
Spring Boot程序的JVM参数设置格式:
java -Xms2048M -Xmx2048M -Xmn1024M -Xss512K -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -jar microservice-eureka-server.jar为什么要有STW?
gc过程,就是找非垃圾对象的过程,发生gc时,没有STW机制的话,线程会继续执行,这时如果线程很快就执行完了,但是gc已经把这些对象标记为非垃圾对象。gc还没结束,这些对象就又变成垃圾对象了,之前做的标记工作就没用了,所以才要有STW机制



