图文整理出常见的JVM面试题及答案

前言


总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。

1.什么情况下会发生栈内存溢出?


思路: 先描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。

我的答案:

  • 定义:栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型
  • 溢出的原因:如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常,方法递归调用产生这种结果。
  • 溢出的原因:如果Java虚拟机栈可以动态扩展,并且扩展的动作已经尝试过,但是无法申请到足够的内存去完成扩展,或者在新建立线程的时候没有足够的内存去创建对应的虚拟机栈,那么Java虚拟机将抛出一个OutOfMemory 异常。(线程启动过多)
  • 配置参数: -Xss 去调整JVM栈的大小


2.详解JVM内存模型


思路: 给面试官画一下JVM内存模型图,并描述每个模块的定义、作用,以及可能会存在的问题,如栈溢出等。

我的答案:

JVM内存结构

猜你喜欢

转载自blog.csdn.net/qq_34820803/article/details/105419141