Java虚拟机在执行java程序的过程中把它所管理的内存划分为若干个不同的数据区域。如下:方法区、虚拟机栈、本地方法栈、堆、程序计数器。
程序计数器:是一块较小的内存空间,它的作用是当前线程所执行的字节码的行号指示器。
虚拟机栈:线程私有的,生命周期与线程相同。描述的是java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法的调用直至执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。
本地方法栈:为虚拟机使用到的本地方法服务。
java堆:是java虚拟机所管理的内存中最大的一块。是被所有线程共享的一块内存区域,在虚拟机启动时创建。是垃圾收集器管理的主要区域。
方法区:是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、茶馆里那个、静态变量、及时编译器编译后的代码等数据。