JVM内存的几个组成部分

java虚拟机的主要组成部分;

java的虚拟机的内存结构主要有四个部分,分别是:

1、java堆

2、方法区

3、栈

4、程序计数器



各个组成部分说明;

一、java堆

对于大多数应用来说,Java堆是java虚拟机所管理的内存中最大的一块,线程共享,是被所有线程共享的一块内存区域,在虚拟机启动时创建,主要是存放对象实例,几乎所有对象实例都在这里分配内存;java堆又可以分为新生代和老年代,新生代和老年代的内存比例默认为1:2,新生代中又分三个部分,1个Eden区和2个Survivor区(分别叫from和to),内存比例默认为8:1:1。一般情况下,新创建的对象都会被分配到Eden区,这些对象经过第一次垃圾回收后,如果仍然存活,将会被移到Survivor区。对象在Survivor区中每熬过一次垃圾回收,年龄就会增加1岁,当它的年龄增加到一定程度时,就会被移动到年老代中。


二、方法区

用于存储虚拟机加载的类信息、常量、静态变量, 属于共享内存区域,又称为永久区。

三、栈

1、虚拟机栈

线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。

2、本地方法栈

区别于 Java 虚拟机栈的是,Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。

四、程序计数器

用于标识当前线程执行胡字节码文件的行号指示器,多线程情况下,每个线程都具有各自独立胡程序计数器,该区域是非线程共享的内存区域。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成。如果线程正在执行一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器的值则为 (Undefined)。

你可能感兴趣的:(JVM内存的几个组成部分)