Java基础教程:Java内存区域
Java基础教程:Java内存区域 运行时数据区域 Java虚拟机 在执行Java程序的过程种会把它所管理的内存划分为若干个不同的数据区域 。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 根据《Java虚拟机规范》,Java虚拟机管理的内存将会包括以下几个运行时数据区域 程序计数器 程序技术器是一块较小的内存空间,可 视为当前线程所执行的字节码的行号计时器 。 在多线程开发中,为了线程切换后能恢复到正确的执行位置, 每条线程都需要有一个独立的程序技术器 ,各条线程之间的技术器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。 如果 当前线程执行的不是Java方法,而是Native方法,则这个计数器值为空。 该区域是唯一一个不存在OutOfMemoryError情况的区域。 Java虚拟机栈 同程序计时器一样,Java虚拟机栈也是线程私有的,他的生命周期与线程相同。虚拟机栈描述是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。 每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程 。 TIPS: 我们常把内存划分为堆和栈,其中栈就是指的Java虚拟机栈