数据区图解:
程序计数器
首先,它是一块分配的较小的内存空间,线程私有,作用类似于PC寄存器,单它仅仅是逻辑上的。
如果线程正在执行Java方法,那么计数器记录的为正在执行的虚拟机字节码的指令地址,如果为Native方法,计数器值为空。同时,它是唯一一个没有规定 OutOfMemoryError的区域
虚拟机栈
线程私有,毕竟每个线程都要执行独立的方法对吧。 它是描述Java方法执行的内存模型,每个方法都会创建一个栈帧数据结构,其中保存这局部变量表,操作数栈等等,虚拟机规范中对其有两个异常状况描述:一个是OutOfMemoryError,另一个就是我们常见的StackOverFlowError,对于某些不可动态扩展的虚拟机栈的虚拟机来说,这就是常见的递归造成的错误。
本地方法栈
线程私有,同样两个Error描述,它是Native方法的执行模型。由于功能相似,在HotSpot虚拟机中将两个合二为一了。
堆
线程共享,所有对象的实例和数组都分配在此,是GC管理的主要区域,同样两个Error定义。
方法区
线程共享,存储被虚拟机加载的类的信息,常量,类变量等等。虚拟机规范将其描述为对的一个逻辑部分,但是有一个别名Non-Heap。大多数人将其成为永久代,但是其实两者并不等价,HotSpot设计团队使用永久代来实现方法区罢了,在JDK1.7的HotSpot中,已经将字符串常量池移出方法区。
运行时常量池
它是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,它具有动态性,String类的intern()方法。
多复习多复习。。