一、概述
根据《Java虚拟机规范》的描述,JVM所管理的内存区域如下图所示:
JVM内存区域主要分为线程私有区域【虚拟机栈、本地方法栈、程序计数器】、线程共享区域【堆、方法区】、直接内存【元空间】。
- 线程私有区域生命周期与线程一致,随着线程的启动而创建,结束而销毁,每个线程与操作系统本地线程对应。
- 线程共享区域随着虚拟机的启动而创建,关闭而销毁。
- 直接内存并非运行时数据区的一部分,但也会被频繁使用。
二、各个内存区域描述
2.1 程序计数器(线程私有)
- 是一个较小的内存空间,可看成是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变计数器的值选取吓一跳需执行的字节码指令。
- 线程私有,各计数器互不影响,独立存储。
- 如在执行Java方法,计数器记录当前指令地址;若执行Native方法,则计数器为空。
- 唯一没有规定OutOfMemoryError情况的区域。