组成部分
程序计数器
因为Java虚拟机的多线程是通过线程轮流切换并分配处理器时间来执行的,所以每条线程都需要一个程序计数器,来知道一个线程执行到了什么地方。
本地方法栈
这是为JVM运行Native方法准备的空间。
Java栈
每个方法在执行的同时都会创建一个栈帧,用户存储局部变量表,操作数栈,动态链接,方法出口等,局部变量存储了8种基本类型,和对象的引用。Java栈是线程私有的,我们不用关心它的数据一致性问题。
堆
堆是存储对象的地方,Java堆是被所有线程共享的一块内存区域,对它的访问要注意同步问题。它也是垃圾收集器的管理的主要区域。
方法区
它是用于存储类结构信息的地方,它也是被线程共享的。其中的常量池、域、方法数据、方法体、构造函数等都存储在这个区域。
参考
《深入理解Java虚拟机》
《深入分析Java Web技术内幕》