JVM面试题汇总

Posted strandtrack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM面试题汇总相关的知识,希望对你有一定的参考价值。

一PC寄存器

1.使用PC寄存器存储字节码指令地址有什么用呢?/ 为什么使用PC寄存器记录当前线程的执行地址呢? 因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行
JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令

2.PC寄存器为什么会设定为线程私有

假设有三个线程ABC,切换线程时,A线程执行到第五步,也就是上面说的指令地址5,这时候切换到B了,那再切换回来怎么办呢?A线程的程序计数寄存器就存了5,等切换回A线程的时候就从第五步开始执行,这就是程序计数寄存器的作用。

这也是为什么程序计数寄存器为什么说是线程私有的原因,因为如果是共有的,共享的,那么我从A线程切换到B线程的时候,程序计数寄存器存的是5,这时候我B线程执行到第3步再切换到C线程,程序计数寄存器存的就是3了,这时候如果我还是回到A线程的话,那么就是执行的第三步了,但我要执行的是第五步,所以必须保证线程私有。
 

二双亲委派机制的优势

  • 避免类的重复加载
  • 保护程序安全,防止核心API被随意篡改
    • 自定义类:java.lang.String
    • 自定义类:java.lang.MeDsh(java.lang包需要访问权限,阻止我们用包名自定义类)

 

三Java虚拟机规范中没有规定任何OOM情况的区域是哪个?

PC寄存器

5.方法中定义的局部变量是否线程安全?

四虚拟机栈的5道面试题

1.举例栈溢出的情况?(StackOverflowError)

  • 递归调用等,通过-Xss设置栈的大小;

2.调整栈的大小,就能保证不出现溢出么?

  • 不能 如递归无限次数肯定会溢出,调整栈大小只能保证溢出的时间晚一些

3.分配的栈内存越大越好么?

  • 不是 会挤占其他线程的空间

4.垃圾回收是否会涉及到虚拟机栈?

  • 不会

5.方法中定义的局部变量是否线程安全?

  • 要具体情况具体分析

 

堆空间一定是所有线程共享的么?

不是,TLAB线程在堆中独有的

以上是关于JVM面试题汇总的主要内容,如果未能解决你的问题,请参考以下文章

最常见的Java面试题及答案汇总

最常见的Java面试题及答案汇总

大厂Java高级面试题汇总解答,超详细

JVM面试题汇总

JVM面试题汇总

2021年大厂面试题汇总:JVM+Redis+多线程+Spring全家桶