本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
在接触到JVM之后,除了内存结构/模型外,听到更多的就是JVM参数,该如何配置的问题,通常是Java程序调优中考虑的一项,更是面试中被问及频率最高的知识点之一,重要程度可想而知。
一、前言
上一篇【JVM系列】1.Java虚拟机内存模型中,作为JVM系列的开篇之作,讲述了JVM的内存结构,各部分在Java程序中所属的地位、作用,从中我们初步了解到各部分参数大小的分配对Java程序是有一定的影响(性能方面),本篇主要介绍设置JVM参数的方法,如设置堆大小、新生代大小、持久带大小、线程栈大小等。
JVM参数列表:
| 参数名 | 参数含义 |
|---|---|
| -Xmx | 堆内存的最大值 |
| -Xms | 堆内存的最小值 |
| -Xmn | 新生代大小 |
| -XX:MaxPermSize | 持久代的最大值 |
| -XX:PermSize | 持久代的初始大小 |
| -Xss | 线程栈的大小 |
二、JVM参数设置方法
篇外话,考虑到可能有人不太清楚如何进行参数设置,故本小节做一简单说明,如果你清楚的话,可直接跳过本节。 (具体JVM参数根据实际设置,以下参数设置只是举例说明而已)
1.eclipse上设置JVM参数
Window->Preferences->Java->Installed JARs,编辑当前使用的JRE,在“Default VM arguments”中输入要配置的JVM参数,如下图所示:
2.idea上设置JVM参数
Run->edit Configurations,如下图所示:
3.Tomcat上设置JVM参数
/tomcat/bin/catalina.bat里面,在set JAVA_OPTS=%JAVA_OPTS%....这句之后加上:
set JAVA_OPTS=%JAVA_OPTS% -Xms1024m -Xmx1024m
重启tomcat,设置生效。
4.执行脚本中设置JVM参数
在Java程序执行脚本中设置,如下所示:
java -Xms1024M -Xmx1024M com.xcbeyond.study.jvm.XmxTest
三、设置最大堆内存
Java程序可以使用的最大堆可以用-Xmx参数设置,最大堆指的是新生代和老年代大小之和的最大值,它是Java程序堆的上限,一旦超过该最大值,将会抛出内存溢出OutOfMemoryError。