具体来说,每个虚拟机是实际实现时,略有不同。
不过基本都符合虚拟机的规范,虚拟机规范将这个区域划分为5部分:
1,Java虚拟机栈
存储局部变量,操作数栈,方法出口等,为每个被执行的方法创建一个栈帧,是线程私有的,这一点跟堆是不同的
2,java堆
java虚拟机中内存最大的一块,所有new的对象,都在这里分配内存,被所有线程共享。
3,程序计数器
保存当前线程执行的字节码行号指示器,通过改变该值,来实现执行下一条字节码指令。
分支,循环,线程恢复等操作,都需要依赖这个计数器来实现。
4,方法区
存储类信息,常量,静态变量,即时编译的代码等数据
5,本地方法栈
与java虚拟机栈类似,只不过java虚拟机栈是服务java方法的,本地方法区栈服务虚拟机调用Native方法的。