Java虚拟机会在执行Java程序的时候,把它管理的内存区域划分为若干不同的数据区域。这里,按照是否线程共享划分:
线程私有的:【程序计数器】【虚拟机栈】【本地方法栈】
线程共享的:【堆】【方法区】
程序计数器
比较小的空间,当前线程执行的字节码的行号指示器.因为线程切换的需要,线程必须知道切换回来后执行的位置。保存的是正在执行的虚拟机字节码指令的地址。
虚拟机栈
Java方法执行的内存模型。一个方法被调用到结束,意味着一个栈帧的创建、进栈、出栈。(栈帧以后细说)
本地方法栈
与虚拟机栈类似,是Java虚拟机调用本地方法的内存模型。
堆
是内存最大的一块空间,不要求物理连续,只要求逻辑连续。所有的对象实例和数组都是在堆上分配。
方法区
用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码
add:运行时常量池
class文件有一个部分叫常量池,存放编译时期生成的字面量和引用。在类加载进入方法区后,这部分内容会进入到运行时常量池里面。