程序计数器:线程私有,用于记录线程运行到哪一步了。多线程的情况下即使线程间来回切换也能知道线程运行到哪一步了。如果线程运行的是native()方法则程序计数器值为0。
Java虚拟机栈:线程私有,生命周期与线程相等。用于存储方法的信息,每个方法执行的同时都会创建一个栈帧用来存储局部变量表(基本数据类型,对象引用,返回地址类型等信息)、操作数栈、动态链接、方法出口等信息。一个方法的开始执行到结束对应栈桢的入栈到出栈。可能抛出OutOfMemory(),StackOverflowError()异常。
本地方法栈:跟虚拟机栈对应只是它为本地方法服务。
Java堆:线程共享,虚拟机启动时就创建。唯一目的就是存放对象实例。可能抛出OutOfMemory ()异常。该区是垃圾收集器主要管理的区域。
方法区:线程共享,用于存放已经被虚拟机加载的类信息、常量、静态变量等。可能抛出OutOfMemory()异常。方法区中还存在一个运行时常量池,常量池用于存放编译期生成的各种字面量和符号引用,它具有动态性,不要求常量一定只有编译期才能产生,运行期间也可能将新的常量放入池中