一、执行Java程序时,内存划分:
1、程序计数器(Program Counter Register);
2、虚拟机栈(VM Stack);
3、本地方法栈(Native Method Stack);
4、方法区(Method Area);
5、堆(Heap);
1、程序计数器
当前线程执行字节码的行号的指示器;
每条线程都有独立的程序计数器;
Java方法记录执行的JVM字节码指令地址;
Native方法为空。
2、虚拟机栈
线程私有;
每个方法执行时产生一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息,执行开始到结束对应入栈到出栈的过程。
3、本地方法栈
与虚拟机栈类似,执行的是Native方法;
4、Java堆
所有线程共享;
GC管理的主要区域;
存放对象实例。
5、方法区
所有线程共享。
存储已加载的类信息、常量、静态变量、JIT后的代码;
运行时常量池
方法区的一部分,编译生成的字面量和符号引用存放在常量池。
直接内存
非JVM运行时的数据区部分。
网友评论