Java 虚拟机的发展从 1996 年初 Sun 公司发布的 JDK 1.0 中所包含的 Sun Classic VM 到今天,涌现了许多优秀的虚拟机实现,除了 Sun 公司的 HotSpot,还有 BEA 的 JRockit、IBM J9 等等。
Java 启动参数分类
java 的启动参数共分为三类:
- 标准参数(-),所有的 JVM 实现都必须实现这些参数的功能,而且向后兼容;
- 非标准参数(-X),默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容;
- 非 stable 参数(-XX),此类参数各个 JVM 实现会有所不同,将来可能会随时取消,需要慎重使用;
非标准参数
非标准参数都以 -X 开头,具体如下列表:
参数及默认值 | 描述 |
---|---|
-Xms2048M | 指定 jvm 堆的初始大小,默认为物理内存的 1/64,最小为 1M;可以指定单位,比如 K、M,若不指定,则默认为字节;一般来讲,设置大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢。 |
-Xmx4096M | 指定 jvm 堆的最大值,默认为物理内存的 1/4 或者 1G,最小为2M;单位与 -Xms 一致。如果程序运行需要占用更多的内存,超出了这个阈值,就会抛出 OutOfMemory 异常。 |
-Xmn512M | 指定 jvm 堆的年轻代的大小。 |
非 stable 参数
非 stable 参数可以被松散的聚合成以下三类:
- 行为参数(Behavioral Options):用于改变 JVM 的一些基础行为;
- 性能调优(Performance Tuning):用于 JVM 的性能调优;
- 调试参数(Debugging Options):一般用于打开跟踪、打印、输出等 JVM 参数,用于显示 JVM 更加详细的信息;
性能调优
参数及默认值 | 描述 |
---|---|
-XX:MaxNewSize=512M | 新生成对象能占用内存的最大值。 |
-XX:PermSize=256M | 设置永久代的初始值,默认是物理内存的 1/64,由于 java 8 开始去掉了永久代的概念,从 jdk 8 开始该参数无用。 |
-XX:MaxPermSize=512M | 设置永久代的最大值,默认是物理内存的 1/4,由于 java 8 开始去掉了永久代的概念,从 jdk 8 开始该参数无用。 |
调试参数
参数及默认值 | 描述 |
---|---|
-XX:-HeapDumpOnOutOfMemoryError | 设置当首次遭遇内存溢出(OOM)时,导出此时堆中相关信息,有关具体内容参考 JVM 启动参数设置 OOM 异常时,自动生成 dump 文件。 |
-XX:HeapDumpPath=./java_<pid>_<date>_<time>_heapDump.hprof | 指定导出对信息文件(dump 文件)时的路径及文件名。 |