jvm 内存配置

时间:2024-10-13 21:50:50

在启动java程序时创建jvm,操作系统会给jvm分配内存,这块内存就是jvm的运行时数据区。

运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)

经常配置的内存参数主要有如下几个:

  • Xss:每个线程的stack大小(栈)
  • Xmx:JAVA HEAP的最大值、默认为物理内存的1/4
  • Xms:JAVA HEAP的初始值,server端最好Xms与Xmx一样
  • Xmn:JAVA HEAP young区的大小(相当于对-XX:newSize、-XX:MaxnewSize同时设置)
  • XX:PermSize:设定内存的永久保存区域(JDK7)
  • XX:MaxPermSize:设定最大内存的永久保存区域(JDK7)

JDK1.8中,取消了PermGen,取而代之的是Metaspace,所以PermSize和MaxPermSize参数失效,取而代之的是元空间:

-XX:MetaspaceSize
-XX:MaxMetaspaceSize

本次通过配置不同的参数,使用jmap观察参数的变化。

1、试验准备:

         1.1 操作系统:win10,  安装jdk8

         2.2  制作一个可执行的jar包,本试验使用spring boot开发了一个web应用 。

         3.3 如果安装了多个版本的jdk,试验时请确保使用的是同一个版本

2、通过配置不同的内存参数和大小,使用jmap命令观察内存变化

     2.1 默认内存(启动不加任何内存参数)

         在命令行窗口执行:  java -jar

      新打开命令窗口,执行jmap -heap java进程ID

        

    2.2 设置最大内存 -Xmx

      java -Xmx20m -jar

      

2.3  新生代

   java -Xmx20m -Xmn5m -jar

2.4  元空间大小

java -Xmx20m -Xmn5m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -jar