一、运行时数据区概述
运行时数据区分为:程序计数器、JVM 栈、本地方法栈、堆、方法区。
| 数据区 | 是否有GC | 是否会出现 OOM | 是否线程共享 |
|---|---|---|---|
| 程序计数器 | 否 | 否 | 线程独立 |
| JVM 栈 | 否 | 是 | 线程独立 |
| 本地方法栈 | 否 | 是 | 线程独立 |
| 堆 | 是 | 是 | 线程共享 |
| 方法区 | 是 | 是 | 线程共享 |
二、程序计数器
2.1 概念
程序计数器是一块较小的内存空间,用来保存下一条指令的地址,它可以看作是当前线程所执行的字节码的行号指示器。
2.2 作用
Java 线程会映射到 CPU 具体的核上,CPU 核会不停地切换线程,程序计数器的作用就是在 CPU 核切回到当前线程的时候能够知道从哪开始继续执行。
2.3 特点
- 运行速度最快的存储区域
- 线程私有,生命周期与线程生命周期保持一致
- 唯一不会产生 OOM 的内存区域