JVM高级面试题及详细答案.docxVIP

  • 2
  • 0
  • 约1.38万字
  • 约 14页
  • 2026-06-08 发布于河北
  • 举报

JVM高级面试题及详细答案

一、核心原理类(高频必问)

1.请详细说说JVM的内存区域划分,以及每个区域的作用、OOM可能出现的场景

答案:JVM内存区域主要分为两大块:线程共享区和线程私有区,注意区分“运行时数据区”和“堆外内存”(堆外内存不属于JVM规范,但实际开发中常涉及)。

1.线程私有区(每个线程独立存在,随线程生命周期销毁,不会有线程安全问题):

-程序计数器:一块极小的内存,记录当前线程执行的字节码指令地址(行号),用于线程切换后恢复执行位置。不会OOM,因为它的内存大小是固定的,只存储行号相关信息。

-虚拟机栈:存储方法调用时的栈帧(包含局部变量表、操作数栈、动态链接、方法出口),每个方法调用对应一个栈帧入栈,方法执行完毕出栈。OOM场景:栈深度过大(如递归调用没有终止条件,导致栈帧不断入栈,超出栈容量);栈容量设置过小(通过-Xss参数配置),也会触发StackOverflowError(属于OOM的一种特殊情况)。

-本地方法栈:和虚拟机栈功能类似,区别是虚拟机栈服务Java方法,本地方法栈服务Native方法(如Object的hashCode()、System.currentTimeMillis())。OOM场景和虚拟机栈一致,同样会出现StackOverflowError。

2.线程共享区(所有线程共用,随JVM启动而创建,关闭而销毁,是OOM

文档评论(0)

1亿VIP精品文档

相关文档