JVM虚拟机内存管理面试题库(含详细真实面试答案).docxVIP

  • 2
  • 0
  • 约5.06千字
  • 约 8页
  • 2026-07-27 发布于河北
  • 举报

JVM虚拟机内存管理面试题库(含详细真实面试答案).docx

JVM虚拟机内存管理面试题库(含详细真实面试答案)

一、基础认知类(入门必问)

1、简单说下JVM的内存区域划分,哪些是线程私有,哪些是线程共享?

参考答案:

JVM运行时数据区一共分五块,核心区分就是线程私有和共享,面试重点记分类:

线程私有(随线程创建、销毁,线程之间互不干扰):

1)程序计数器:当前线程执行的字节码行号指示器,唯一一个没有OOM的内存区域;

2)虚拟机栈:存方法的栈帧,局部变量、操作数栈、方法返回地址、动态链接都在这里,方法调用和结束对应栈帧入栈出栈;

3)本地方法栈:专门给Native方法服务,作用和虚拟机栈类似,只是服务对象是本地方法。

线程共享(整个JVM进程共享,全局唯一):

1)堆:所有对象、数组实例都在这里,是垃圾回收的核心区域,也是最容易OOM的区域;

2)方法区:存类的元数据、常量、静态变量、即时编译代码等,JDK8之后彻底废弃永久代,用元空间实现方法区,元空间直接用本地内存,不在虚拟机堆内。

2、程序计数器为什么不会发生内存溢出?

参考答案:

首先它占用的内存极小,只存储当前线程的字节码执行地址,一个线程就对应一个很小的计数器。

其次它的生命周期和线程一致,线程结束就自动释放,没有持续占用内存的情况。而且JVM规范里直接规定了该区域不允许出现内存溢出,所以实际开发中永远遇不到这个区域的OOM。

3、虚拟机栈和本地方法栈的区别?栈溢出的场景有

文档评论(0)

1亿VIP精品文档

相关文档