jvm内存模型
在网上看到了一些关于jvm内存模型的讲解视频,觉得讲的很好,后续自己再查阅资料进行了一些整理,记录一下,加深对于jvm的理解。
jdk1.8后元空间使用的堆外内存。
堆栈相关的参数
-
-Xss:每个线程的栈大小,针对的是单个线程。 当这个参数越大,每个线程可以分配的线程栈就越多,但是整个jvm能够开启的线程就越少,反之则是线程更多,但是每个线程的线程栈更少。
-
-Xms: 设置堆的初始化可用大小,默认是物理内存的1/64
-
-Xmx: 设置堆的最大可用内存大小,默认是物理内存的1/4
-
-Xmn:新生代的大小
-
-XX:NewRatio: 默认是2,代表新生代是老年代的一半,占整个堆内存的1/3
-
-XX:SurvivorRatio: 默认是8,表示一个Survivor和Eden区的比例是1:8,所以整个Survivor区占堆内存的2/10,Eden占8/10
关于方法区(元空间)的参数
-XX:MaxMetaspaceSize : 设置元空间的最大值,默认是-1,则不限制元空间的大小。
-XX:MetaspaceSize:元空间的初始大小,默认是21M,如果在项目启动过程或者运行过程中,元空间被打满,则会出发full gc,并且会对这个值进行调整。(如果释放了大量的空间, 就适当降低该值; 如果释放了很少的空间, 那么在不超过-XX:MaxMetaspaceSize的情况下, 适当提高该值)。 因为full gc是能规避就要规避的,所以建议对该值进行配置。 一般情况下将两个值设置相同,8G的内存一般是256M。