运行时数据区分为程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区等,程序计数器可以看作当前线程的私有的字节码行号指示器,字节码指示器工作的时候就是通过改变计数器的值来读取下一条指令。多线程程序每个线程都有独立的程序计数器,来确保线程切换时能回到正确的位置工作。Java虚拟机栈也是线程私有的,也是人们常说的栈,每个方法压栈运行时都会创建一个栈帧来存储局部变量表(存放了编译器可知的数据类型)、操作数栈、动态链接、方法出口等信息。而本地方法栈则是为虚拟机所使用的Native方法服务。Java堆是被所有线程共享的一块内存区域,虚拟机在此存放对象实例,这里也是垃圾收集器管理的主要区域,方法区也是被所有线程共享的一块内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量等数据 。