JVM内存结构

JVM虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同是数据区域,这些区域有各自各自的用途。主要包含以下几个部分组成:

JVM内存结构_第1张图片
image.png
JVM内存结构_第2张图片
image.png
  1. 程序计数器占用的内存空间我们可以忽略不计,它是每个线程所执行的字节码的行号指示器。
  2. 虚拟机栈是线程私有的,生命周期和线程相同。它描述的是方法执行的内存模型。同时用于存储局部变量、操作数栈、动态链接、方法出口等。
  3. 本地方法栈,类似虚拟机栈,它调用的是是native方法。
  4. 堆是jvm中管理内存中最大一块。它是被共享,存放对象实例,也被称为“gc堆”。垃圾回收的主要管理区域。 由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配。
  5. 方法区也是共享的内存区域。它主要存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(jit)编译后的代码数据。
JVM内存结构_第3张图片
image.png

控制参数
-Xms设置堆的最小空间大小。
-Xmx设置堆的最大空间大小。
-XX:NewSize设置新生代最小空间大小。
-XX:MaxNewSize设置新生代最大空间大小。
-XX:PermSize设置永久代最小空间大小。
-XX:MaxPermSize设置永久代最大空间大小。
-Xss设置每个线程的堆栈大小。
老年代空间大小=堆空间大小-年轻代大空间大小

你可能感兴趣的:(JVM内存结构)