JVM内存管理分为两部分
- 内存分配
- 内存回收
简单介绍java程序执行流程
首先Java源代码文件会被java编译器编译为字节码文件,然后由jvm中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行.在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存
JVM内存划分
JVM内存通常分为这几个部分
- PC寄存器
- java栈
- 本地方法栈
- 方法区
- 堆
Java堆和方法区是所有线程共享的
- Java堆:用于存储Java对象
- 方法区:用于存储类结构信息,class文件加载进JVM时会被解析成JVM识别的几个部分分别存储在不同的数据结构中:常量池、域、方法数据、方法体、构造函数,包括类中的方法、实例初始化、接口初始化等。
Java栈和PC寄存器是线程私有的,每个执行引擎启动时都会创建自己的Java栈和PC寄存器
- Java栈:和线程相关,线程创建的时候,jvm都会为他分配一个对应的Java栈,用于存储方法参数,局部变量,方法返回值还有运算中间结果
- PC寄存器:用于记录下一条要执行的字节码指令地址和被中断地址
- 本地方法栈:是为JVM运行本地方法准备的空间,类似于java栈