参考:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) 周志明 著
一、JVM运行时数据区
Java
虚拟机在执行Java
程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。
根据 《Java虚拟机规范》 的规定,Java
虚拟机所管理的内存将会包括以下几个运行时数据区域:
其中:
- 虚拟机栈、本地方法栈、程序计数器 是线程私有的,每个线程都有一份。
- 方法区、堆 是线程共享的,整个虚拟机只有一份。
1、虚拟机栈(JVM Stack)
线程私有。
虚拟机栈描述的是Java方法执行的线程内存模型:一个线程的每个方法被执行的时候,都会创建一个栈帧(Statck Frame)。栈帧中存储的有局部变量表、操作数栈、动态链接、方法出口等信息。当方法被调用时,栈帧在虚拟机栈中入栈,