一、什么是JVM内存?
一个Java程序执行javac后生成.class文件,然后JVM的类加载器加载各个类的字节码文件,加载完毕之后交给JVM执行。在整个程序的执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作运行时数据区,也就是我要说的JVM内存。
二、JVM内存区域分为哪几个部分?
主要分为以下五个部分:程序计数器、JVM栈、本地方法栈、堆、方法区。
三、它们的各自的作用是什么?
1.程序计数器
(也称作PC寄存器):它的作用是指示执行哪条指令的(
通过改变计数器的值来选取下一条需要执行的字节码指令)。
2.JVM栈
:
每当JVM调用一个方法时,就会在JVM栈中创建一个
栈帧
(可以理解为过程活动记录)用来存储
局部变量列表
,方法调用完毕之后,栈帧消失。
如果方法中又调用了其他方法,则继续在栈顶创建新的栈帧。
局部变量列表
存储的是方法中的
局部变量
。对于基本数据类型的变量,直接存储变量的值;对于引用类型的变量,存储的是指向对象的引用
。
3.本地方法栈
:和JVM栈类似,区别就是
本地方法栈是为本地方法服务的
,而
JVM栈是为Java方法服务的。
4.堆
:
存放的是new出来的对象实例。
5.方法区
:
存储已经加载的类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量及编译后的代码。在方法区中有一个
非常重要的部分就是
运行时常量池
,用于
存储常量
的。