jvm架构原理剖析篇


简单题(5道)

考查内容:JVM运行时数据区域

题干 :Java虚拟机栈的主要作用是?

A. 存储对象实例

B. 存储方法调用和局部变量

C. 存储静态字段

D. 存储字节码指令
正确答案 :B
解析:虚拟机栈用于存储方法调用帧(包括局部变量表和操作数栈),对象实例存储在堆中,静态字段存储在方法区,字节码指令存储在方法区。


考查内容:类加载机制

题干 :以下哪个不是类加载的阶段?

A. 加载

B. 验证

C. 编译

D. 初始化
正确答案 :C
解析:类加载分为加载、验证、准备、解析、初始化,编译是JIT编译器的行为,不属于类加载阶段。


考查内容:垃圾回收算法

题干 :Mark-Sweep算法的主要缺点是?

A. 需要STW(Stop-The-World)

B. 无法处理循环引用

C. 产生内存碎片

D. 依赖分代思想
正确答案 :C
解析:Mark-Sweep算法标记存活对象后直接清理,可能导致内存碎片化,而循环引用可通过算法检测,分代是优化策略。


考查内容:内存模型

题干volatile关键字的主要作用是?

A. 保证原子性

B. 防止指令重排序

C. 创建线程副本

D. 锁定内存地址
正确答案 :B
解析volatile通过禁止指令重排序和提供可见性保证,但不保证原子性,线程副本是旧版JMM的概念。


考查内容:JVM架构

题干 :以下哪项属于JVM运行时数据区?

A. 寄存器

B. 本地方法栈

C. 内核栈

D. 硬件缓存
正确答案 :B
解析:JVM数据区包括虚拟机栈、本地方法栈、堆、方法区和程序计数器,其他选项属于系统或硬件层面。


中等题(10道)

考查内容:垃圾回收机制

题干 :CMS(Concurrent Mark Sweep)的正确描述是?

A. 基于标记-清除算法

B. 需要完全STW

C. 适合老年代回收

D. 会产生紧凑内存
正确答案 :A
解析:CMS采用标记-清除算法,并发标记和清理减少STW,主要针对老年代,但会留下内存碎片。


考查内容:类加载机制

题干 :双亲委派模型的作用是?

A. 加快类加载速度

B. 避免类冲突

C. 优先加载自定义类

D. 减少内存占用
正确答案 :B
解析:双亲委派通过优先加载核心类库(如java.lang包),避免用户类覆盖核心类,确保安全。


考查内容:内存模型

题干synchronized块对锁的影响是?

A. 升级为重量级锁

B. 触发GC操作

C. 释放锁后对象可被回收

D. 阻塞其他线程访问
正确答案 :C
解析synchronized解锁后,对象监视器不再持有,若无其他引用则对象可被回收。


考查内容:JVM运行流程

题干 :Java代码执行的第一步是?

A. 编译为字节码

B. 加载类到方法区

C. 解释执行指令

D. 分配堆内存
正确答案 :B
解析:JVM启动后先加载类到方法区(如类信息、常量池),再执行字节码。


考查内容:数据区域

题干 :以下哪项是线程共享的?

A. 虚拟机栈

B. 本地方法栈

C. 堆

D. 程序计数器
正确答案 :C
解析:堆是全局共享的,虚拟机栈、本地方法栈和程序计数器均为线程私有。


考查内容:垃圾回收算法

题干 :G1收集器的特点不包括?

A. 基于Region分区

B. 需要完全STW

C. 支持并行压缩

D. 可预测停顿时间
正确答案 :B
解析:G1通过并行化和分Region回收减少STW时间,且支持可配置的停顿时间预测。


考查内容:类加载机制

题干 :以下哪项属于类初始化的触发条件?

A. 父类初始化完成

B. 主动调用静态方法

C. 创建子类对象

D. 加载类文件到内存
正确答案 :B
解析:类初始化(即方法执行)由主动引用(如调用静态方法)触发,被动引用(如创建对象)不会触发。


考查内容:内存模型

题干final字段的可见性如何保证?

A. 插入内存屏障

B. 禁止指令重排序

C. 使用锁同步

D. 延迟初始化
正确答案 :B
解析final字段在构造函数完成后立即可见,JMM通过禁止对其写操作的指令重排序保证可见性。


考查内容:JVM架构

题干 :方法区存储的内容不包括?

A. 类元数据

B. 常量池

C. 线程状态

D. 静态变量
正确答案 :C
解析:方法区存储类信息、常量池和静态变量,线程状态由虚拟机栈中的程序计数器记录。


考查内容:垃圾回收机制

题干 :ZGC(Z Garbage Collector)的核心目标是?

A. 减少内存碎片

B. 支持超大堆回收

C. 实现锁free暂停

D. 优化新生代回收
正确答案 :B
解析:ZGC设计目标是处理TB级堆内存,同时保持低延迟,而非仅解决碎片或锁竞争问题。


困难题(5道)

考查内容:内存模型与多线程

题干 :以下关于volatilesynchronized的说法正确的是?

A. volatilesynchronized更轻量

B. synchronized能保证原子性

C. volatile可替代synchronized

D. 两者均依赖CPU锁
正确答案 :A
解析volatile仅保证可见性和禁止重排序,synchronized额外提供原子性和互斥,但性能开销更大。


考查内容:类加载机制与热更新

题干 :JVM中类热替换(HotSwap)的关键限制是?

A. 方法签名不可修改

B. 类加载器必须一致

C. 不能添加新的接口

D. 静态变量会被重置
正确答案 :A
解析:热替换要求新类的方法签名与原类完全一致,否则会导致兼容性问题,静态变量状态需手动恢复。


考查内容:垃圾回收与内存分配

题干 :TLAB(Thread-Local Allocation Buffer)的主要目的是?

A. 减少全局锁竞争

B. 提高对象访问速度

C. 避免内存碎片

D. 加速跨代对象晋升
正确答案 :A
解析:TLAB为每个线程分配独立内存区域,减少多线程并发分配时的全局锁(如Eden区锁)竞争。


考查内容:JVM底层原理

题干 :JVM中方法调用的栈帧不包含以下哪项?

A. 局部变量表

B. 动态链接

C. 方法出口地址

D. 对象头信息
正确答案 :D
解析:栈帧包含局部变量表、操作数栈、动态链接(方法引用)和方法返回地址,对象头信息存储在堆中。


考查内容:内存模型与指令重排序

题干:假设代码为:

java 复制代码
int a = 1;  
int b = 2;  
// 可能发生重排序  
System.out.println(a);  
System.out.println(b);  

以下哪项是合法的重排序结果?

A. 1, 2

B. 2, 1

C. 打印顺序随机

D. 仅允许a=1在前
正确答案 :B
解析 :在无happens-before约束的场景下,JVM可能将a=1b=2的赋值重排序为b=2先执行,导致输出2,1。


以上题目涵盖JVM核心知识点,难度分层合理,解析清晰。如需调整或补充,请随时告知!