JVM 面试八股文
1. JVM 内存结构
-
JVM 运行时数据区域 | 区域 | 作用 | GC 影响 | |---|---|---| | 程序计数器 | 记录当前线程执行的字节码指令地址,线程私有 | 不会发生 OOM | | 虚拟机栈 | 方法执行时存储局部变量、操作数栈、动态链接等 | 栈溢出 (
StackOverflowError) | | 本地方法栈 | 存放native方法的调用栈信息 | 可能导致 OOM | | 堆 | 存放对象实例,垃圾回收主要区域 | 受 GC 影响 (OutOfMemoryError) | | 方法区(元空间) | 存储类信息、常量、静态变量、JIT 编译代码 | JDK8 及以上使用 元空间 | -
堆内存划分
-
新生代(Young):Eden(8)+ S0(1)+ S1(1),使用 标记-复制算法。
-
老年代(Old):存放存活时间长的对象,使用 标记-整理算法。
-
字符串常量池
-
JDK7 及以前:位于方法区(永久代)。
-
JDK8 及以后:位于堆内存,回收更高效。
2024年3月25日大约 4 分钟