1. 跟 JVM 内存相关的几个核心参数

  • 限定 Java 堆内存的总大小
    • -Xms:设置 Java 堆内存的刚开始的大小
    • -Xmx:允许 Java 堆内存扩张到的最大大小
    • 这两个参数,通常会设置成一样的大小
  • 限定 Java 堆内存的新生代、老年代的大小
    • -Xmn:设置新生代的大小
    • 扣除新生代大小之后的剩余内存就是老年代的内存大小
  • 限定 Java JVM 的永久代的总大小
    • JDK1.8以前的版本
      • -XX:PermSize 永久代刚开始的大小
      • -XX:MaxPermSize 允许扩张到的最大大小
    • JDK1.8以后的版本
      • -XX:MetaspaceSize 永久代刚开始的大小
      • -XX:MaxMetaspaceSize 允许扩张到的最大大小
  • 限定每个线程的 Java 虚拟机栈的内存大小
    • -Xss

image.png

2. 如何在启动系统的时候设置 JVM 参数?

(1) 开发时设置 JVM 参数

在 Eclipse/IntelliJ IDEA 里开发代码时:

  • 首先右击你写好的一个带 main() 方法的类,他有一个菜单栏,里面有一个“Debug as”选项,鼠标移动进入,会看到一个“Debug Configuration”选项,接着会看到下面的面板有一个“Arguments”的选项;
  • 然后在“VM arguments”中输入你的 JVM 参数即可;
    • -Xms 之类的参数直接后面跟上你要设置的内存大小,多少 M 即可;
    • -XX:PermSize 这种格式的参数,需要跟一个“=”符号,跟上你要设置的内存大小即可;

image.png

(2) 在线上部署时

采用“java -jar”的方式启动一个 jar 包里的系统,那么就可以采用类似下面的格式:

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