(图片来自https://www.cnblogs.com/whgk/p/6138522.html)
先从线程私有区开始介绍
虚拟机栈
Java虚拟机栈是由一个个栈帧组成的,当一个方法被调用时,代表这个方法的栈帧入栈,当这个方法结束时,栈帧出栈。可以理解栈帧为方法的运行空间,存放存储局部变量表、操作数表、动态连接、方法出口等信息
本地方法栈
本地方法栈对应与虚拟机栈,里面的方法是本地方法
程序计数器
<!–
p.p1 {margin: 0.0px 0.0px 12.0px 0.0px; line-height: 14.0px; font: 12.0px ‘Songti SC’; color: #000000; -webkit-text-stroke: #000000}
span.s1 {font-kerning: none}
–>
用来指示当前字节码的行号,用来记录当前程序执行到哪了
方法区
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。在HotSpot虚拟机上又被称为永久代。
常量池
运行时常量池是方法区的一部分,用于存放编译期间生成的各中字面量和符号引用
堆
<!–
p.p1 {margin: 0.0px 0.0px 12.0px 0.0px; line-height: 14.0px; font: 12.0px ‘Songti SC’; color: #000000; -webkit-text-stroke: #000000}
span.s1 {font: 12.0px Times; font-kerning: none}
span.s2 {font-kerning: none}
–>
Java实例对象存储的地方,又是垃圾收集器管理的主要区域,又称GC堆