Java虚拟机内存区域
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。根据Java虚拟机规范,包括以下几个运行时数据区。 一、程序计数器 内存空间:较小。 作 用:当前线程所执行的字节码的行号指示器。 特性分析:Java虚拟机的多线程的执行是由线程轮流切换并分配处理器执行时间来完成的。在确定的某个时刻,一个处理器只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的的执行位置,每条线程都需要一个独立的程序计数器,各个线程之间计数互不影响,独立存储。 是线程私有的内存区域。 记录值:如果线程执行的是Java方法,那么记录的是正在执行的虚拟机字节码指令地址;如果线程执行的是Native方法,那么这个值为空。 此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError的区域。 二、Java虚拟机栈 是线程私有的,生命周期与线程相同。 作用:描述的是Java方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在栈中的入栈和出栈过程。 虚拟机栈中的局部变量表存放了 编译期可知的各种 基本数据类型(boolean、byte、char、short、int、float、long、double)