JVM核心参数图解

Posted god-jiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM核心参数图解相关的知识,希望对你有一定的参考价值。

前言

作为一名Java开发工程师,基本上都要接触到JVM,实际开发中也许也会遇到JVM的相关问题,面试中肯定也会问到JVM的相关知识。所以今天这篇主要分享JVM的各个参数所代表的意思并且通过图解的方式帮助读者更加好理解。

JVM核心参数

在JVM里有几个比较核心的参数,今天就主要来讲这几个:

-Xms:JVM初始堆内存大小
-Xmx:JVM堆内存的最大值
-Xmn:JVM中新生代大小
-XX:PermSize:永久代大小
-XX:MaxPermSize:永久代最大值
-Xss:JVM每个线程的大小

下面我们就对上面列举的几个核心参数进行说明。

1、-Xms和-Xmx分别表示JVM初始堆内存大小和堆内存最大值

这两个参数主要作用就是限定JVM中堆内存的大小。

2、-Xmn:表示JVM堆内存中新生代的大小

一般设置完堆内存,然后用堆内存-新生代大小=老年代大小

3、-XX:PermSize和-XX:MaxPermSize,分别代表永久代的大小和永久代的最大值

如果在JDK8以后,永久代被元空间替代了,所以这两个参数变成了-XX:MetaspaceSize和-XX:MaxMetaspaceSize。这两个参数就是限定永久代的大小。

实际用元空间代替永久代可以避免OOM,因为元空间用的是本地内存,不同于永久代是有上限的。更深层的原因是要合并HotSpot和JRockit,然后JRockit没有永久代,所以就使用了元空间。

4、-Xss:这个参数限定了JVM每个参数的大小

每个线程都有自己一个虚拟机栈,每次执行一个方法,就会把方法的栈帧压入栈中,方法执行完,该栈帧就会从线程里的栈出栈

启动系统的时候配置JVM参数

在自己的编译器(以Idea举例)设置启动时JVM参数,可以加快Idea的编译速度

在启动的main类选择Edit Configurations,然后在VM options配置JVM参数即可

除了以上的方法外,还有第二种方法是打开idea.vmoptions修改配置信息,一般在idea的Help菜单下的Edit Custom VM Options

把编译器的堆内存改大就可以使编译速度提高(当然也不是绝对的,大部分情况下可以

线上部署应用的时候如何指定JVM参数

这个其实就很简单,举例采用"java -jar"的方式启动应用,可以采用以下的方式:

java -Xms512M -Xmx512M -Xmn256M -Xss1M -XX:PermSize=128M -XX:MaxPermSize=128M -jar test.jar

其他方式部署的也是可以配置启动参数,感兴趣可以自行了解。

最后分享

分享了JVM的核心参数之后,最后想说一句,其实JVM参数该如何配置,应该是根据不同的业务具体的一些场景来决定的,而不是说有一个固定的配置模块,一切都要从业务场景出发。

以上是关于JVM核心参数图解的主要内容,如果未能解决你的问题,请参考以下文章

JVM核心参数图解

图解JVM垃圾内存回收算法

醒酒菜:动画图解核心内存区--堆

#yyds干货盘点# 醒酒菜:动画图解核心内存区--堆

JVM08_堆

图解带你掌握`JVM`运行时核心内存区