java虚拟机在执行程序的过程中会把它管理的内存划分为若干个不同的数据区,包括
1. 程序计数器。线程私有的内存,存储当前线程字节码指令,每个线程都需要有一个私有的程序计数器,以便线程切换时能恢复到正确的执行位置。
2. java虚拟机栈。线程私有,生命周期与线程相同。存储局部变量表,操作数栈,动态链接,方法出口等。
3. 本地方法栈。类似虚拟机栈,虚拟栈为虚拟机执行java方法(字节码)服务,本地方法栈为虚拟机使用到的Native方法(非java语言编写的方法)服务。
4. java堆。所有线程共享的一块内存区域。所有对象实例以及数组都要在堆上分配。垃圾收集器管理的主要区域。
5. 方法区。各个线程共享的内存区域。用于存储虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据。