前言
作为一名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”的方式启动应用,可以采用以下的方式:1
java -Xms512M -Xmx512M -Xmn256M -Xss1M -XX:PermSize=128M -XX:MaxPermSize=128M -jar test.jar
其他方式部署的也是可以配置启动参数,感兴趣可以自行了解。
最后分享
分享了JVM的核心参数之后,最后想说一句,其实JVM参数该如何配置,应该是根据不同的业务具体的一些场景来决定的,而不是说有一个固定的配置模块,一切都要从业务场景出发。