写在前面:
java虚拟机再执行java程序的时候会将虚拟机所管理的内存分成若干个功能不同的区域,虚拟机所管理的这部分内存我们称为运行时数据区域
‘运行时数据区域’分区图
321B64F4-5530-4473-9E84-596D093B1BFA.png分区解释:
- 方法区:
- 方法区用于存储已经被虚拟机加载的类信息,常量,静态变量,被编译器编译后的代码等
- 方法区中还存在运行时常量池,这个区域用于存放编译期产生的字面量和符号信息
- 各线程共享
- 栈区:
- 栈区分为虚拟机栈和本地方法栈,虚拟机栈描述的是java方法的执行内存模型,每个方法再执行的时候都会创建一个栈帧(stack frame),用于存储局部变量表,操作数栈,动态链接,方法出口等信息,虚拟机栈就是存储该栈帧,每个方法的执行和执行结束就是一个栈帧的入栈与出栈;本地方法栈与虚拟机栈的作用极其相似,只是针对的对象不同,虚拟机栈是程序员写的代码方法执行的存储,而本地方法栈是针对Native 方法
- 各线程私有
- 堆
- 堆是java虚拟机中管理的最大一块内存,主要存储对象的实例,也就是java代码中的new 关键字创建的对象实例都存放在这里。
- 各线程共享
- 程序计数器
- 记录当前线程执行的字节码的行号
网友评论