- 1
- 0
- 约3.42千字
- 约 6页
- 2026-07-27 发布于河北
- 举报
JVM数据区高频面试题及详细答案(实战口语版)
一、基础认知类(入门必问)
1、JVM运行时数据区包含哪几个区域?哪些是线程私有?哪些是线程共享?
参考答案:
JVM运行时数据区总共分5个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区。
其中线程私有(线程隔离、线程结束就释放):程序计数器、虚拟机栈、本地方法栈。
线程共享(全局共用、JVM启动创建、关闭销毁):堆、方法区。
简单记:和线程执行相关的栈类区域都是私有,存数据、存元信息的都是共享。
2、为什么这三个区域是线程私有?共享会有什么问题?
参考答案:
因为每个线程都是独立执行的,各自有自己的执行流程、栈帧、方法执行状态。如果多个线程共用栈、程序计数器,线程执行的代码位置、局部变量就会互相覆盖,直接乱序、报错。
而堆和方法区是存对象、静态变量、类信息的,本来就是多线程共享访问的,只需要做并发控制就行,不需要隔离。
二、各区域深度面试题(核心高频)
3、程序计数器的作用是什么?有什么特点?会不会OOM?
参考答案:
程序计数器就是当前线程执行代码的行号指示器,记录当前线程执行到哪一条字节码指令。
主要作用:线程切换后恢复执行位置,保证多线程切换后代码能接着往下跑。
特点:
1、唯一一个没有OOM的内存区域;
2、线程私有,内存极小,只存指令地址;
3、执行Native方法时计数器为空,执行Java代码时记录指令地址。
不会
原创力文档

文档评论(0)