Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java 虚拟机全解


Java 虚拟机的发展从 1996 年初 Sun 公司发布的 JDK 1.0 中所包含的 Sun Classic VM 到今天,涌现了许多优秀的虚拟机实现,除了 Sun 公司的 HotSpot,还有 BEA 的 JRockit、IBM J9 等等。

Java 启动参数分类

java 的启动参数共分为三类:

  1. 标准参数(-),所有的 JVM 实现都必须实现这些参数的功能,而且向后兼容;
  2. 非标准参数(-X),默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容;
  3. 非 stable 参数(-XX),此类参数各个 JVM 实现会有所不同,将来可能会随时取消,需要慎重使用;

非标准参数

非标准参数都以 -X 开头,具体如下列表:

非标准参数列表
参数及默认值 描述
-Xms2048M 指定 jvm 堆的初始大小,默认为物理内存的 1/64,最小为 1M;可以指定单位,比如 K、M,若不指定,则默认为字节;一般来讲,设置大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢。
-Xmx4096M 指定 jvm 堆的最大值,默认为物理内存的 1/4 或者 1G,最小为2M;单位与 -Xms 一致。如果程序运行需要占用更多的内存,超出了这个阈值,就会抛出 OutOfMemory 异常。
-Xmn512M 指定 jvm 堆的年轻代的大小。

非 stable 参数

非 stable 参数可以被松散的聚合成以下三类:

  1. 行为参数(Behavioral Options):用于改变 JVM 的一些基础行为;
  2. 性能调优(Performance Tuning):用于 JVM 的性能调优;
  3. 调试参数(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 文件)时的路径及文件名。