JAVA虚拟机相关面试题

JVM笔记参考
JUC笔记参考 GITHUB 面试题

尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)

类加载子系统

运行时数据区

程序计数器

JVM虚拟机栈

JAVA虚拟机相关面试题

栈帧

  • 操作数栈
  • 局部变量表
  • 动态链接
  • 方法返回地址
  • 附加信息

JVM:栈式虚拟机;零地址指令,更加紧凑;进出栈更加频繁(栈顶缓存技术ToS),指令更多
区别于寄存器虚拟机(多地址,指令更少,执行速度快)

面试题

++i和i++的区别;字节码角度

JAVA虚拟机相关面试题JAVA虚拟机相关面试题
第一类问题相同

举例栈溢出的情况

  • *Error
    • 不断加栈帧 ,栈大小固定的情况下栈大小不足,-Xss设置
  • OOM
    • 栈大小动态变化,内存不够分配时

调整栈的大小不能保证不溢出(增大只能使其出现时间更晚一些,不能保证不会出现)

分配的占内存越大越好吗? 单位时间内发生溢出概率变小;内存空间有限,某线程栈大小过大,可能挤占其他线程以及堆等空间

垃圾回收是否涉及虚拟机栈?不!

方法中定义的局部变量是否局部安全?具体问题具体分析
线程安全:如果只有一个线程可以操作此数据,则必然是线程安全;(内部产生内部消亡)
如果多个线程操作此数据,则此数据是共享数据;如果不考虑同步机制,则会存在。
JAVA虚拟机相关面试题
JAVA虚拟机相关面试题发生逃逸
JAVA虚拟机相关面试题s1在线程内部消亡了,不会被返回给其他调用

本地方法接口

本地方法栈

堆空间

堆的核心概述

进程对应一个JVM实例,一个JVM实例对应一个Runtime(单例),有一个运行时数据区
一个JVM实例只有一个堆内存,JAVA堆区在JVM启动时就被创建,其空间大小也被确定。

设置堆内存大小与OOM

初始-Xms
最大-Xmx

OOM:发生在老年代(FullGC/Major GC后)

年轻代与老年代

伊甸园区
幸存者0区
幸存者1区

老年代

老:年轻=2:1
Eden:s0:s1=8:1:1

图解对象分配的过程

JAVA虚拟机相关面试题

Minor GC Major GC Full GC

JAVA虚拟机相关面试题

堆空间分代思想

内存分配策略

为对象分配内存:TLAB

堆是分配对象的唯一选择吗

逃逸分析

代码优化

方法区

=
区子系统