简单题(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道)
考查内容:内存模型与多线程
题干:以下关于volatile
和synchronized
的说法正确的是?
A. volatile
比synchronized
更轻量
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
解析:栈帧包含局部变量表、操作数栈、动态链接(方法引用)和方法返回地址,对象头信息存储在堆中。
考查内容:内存模型与指令重排序
题干:假设代码为:
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=1
和b=2
的赋值重排序为b=2
先执行,导致输出2,1。
以上题目涵盖JVM核心知识点,难度分层合理,解析清晰。如需调整或补充,请随时告知!