JVM调优 - 参数配置

你平时工作用过的jvm常用基本配置参数有哪些?

long totalMemory = Runtime.getRuntime().totalMemory();//返回jvm启动时内存总容量
long maxMemory = Runtime.getRuntime().maxMemory();// 返回jvm视图使用最大的内容容量
System.out.println("-Xms:"+totalMemory/1024/1024);
System.out.println("-Xmx:"+maxMemory/1024/1024);

常用参数:

-Xms:初始大小内存,默认为物理内存的 1/64,等价于-XX:InitialHeapSize

-Xmx:最大分配内存,默认物理内存1/4,等价于-XX:MaxHeapSize

-Xss:设置单个线程栈大小,一般默认为 512k~1024k,等价于

​ -XX:ThreadStackSize

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bgQwa4ou-1590116716629)(assets/1589906924601.png)]

​ 注意:如果获取的-Xss结果为0,代表采用平台默认值,不同平台默认值不同,通常为1024k

-Xmn:设置年轻代大小

-XX:MetaspaceSize :设置元空间大小

​ 注意:元空间的本质和永久代类似,都是对JVM规范中方法区的内存实现,但是元空间和永久代(堆空间)之间最大的差别在于:元空间内存并不在JVM内存中,而是直接使用本地内存,所以默认情况,元空间的大小只受本地内存限制。


设置案例:

扫描二维码关注公众号,回复: 12198421 查看本文章

(1) 将堆的最小值-Xms 参数与最大值-Xmx 参数设置为一样即可避免堆自动扩展(内存抖动)。因为JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指 定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。
(2) 栈大小通常只有几百k,决定于函数调用的深度。每个线程都有自己独立的栈空间(私有栈空间,不共享)。如果函数调用太深,超过了栈的大小,则会抛出java.lang.StackOverflowError。遇到这种错误,通常情况下,不是去调整-Xss参数,而是应该去检查是否是函数调用太深导致的,是否使用了递归,能不能保证递归出口等。
(3) -XX:+UseParallelGC 默认采用并行垃圾回收器

​ -XX:+UseSerialGC 采用串行垃圾回收器

-Xms4270m -Xms4270m -XX:MetaspaceSize=1024m

-XX:+PrintCommandLineFlags

-XX:+PrintGCDetails -XX:+UseParallelGC

猜你喜欢

转载自blog.csdn.net/Java_lover_zpark/article/details/106275698