JMH 基准测试

共 18 题
#

1. JMH 的 @State 与线程安全

A 所有线程共享一个实例
B 全局单例
C 无状态
D 每个线程独立实例 ✓ 正确答案
#

2. JMH 的 profiler,perfasm、stack、gc 的用法

A 汇编代码
B 线程栈
C GC 活动与分配 ✓ 正确答案
D 类加载
#

3. JMH 的陷阱,死代码消除、常量折叠、伪共享、预热不足

A @Param
B Blackhole.consume ✓ 正确答案
C @Setup
D @Fork
#

4. JMH 的注解处理器如何生成基准类(@Benchmark 方法的包装与黑盒)

A 记录日志
B 设置线程
C 消费基准结果,防止 JIT 死代码消除 ✓ 正确答案
D 初始化状态
#

5. JMH 与 CI 集成,基准回归测试如何落地

A 单次运行
B 与基线对比 + 统计显著性 ✓ 正确答案
C 主观判断
D 只看吞吐绝对值
#

6. JMH 的 @BenchmarkMode,Throughput、AverageTime、SampleTime、SingleShotTime

A Throughput
B SingleShotTime
C AverageTime
D SampleTime ✓ 正确答案
#

7. JMH 的 @CompilerControl 与内联控制

A 强制内联
B 禁止方法内联 ✓ 正确答案
C 删除方法
D 强制编译
#

8. JMH 的 Blackhole 与常量折叠防护

A 用常量参数
B 用 @Param 或运行时动态输入 ✓ 正确答案
C 删除状态
D 增加线程
#

9. JMH 的黑洞(Blackhole)与死代码消除,为什么基准方法返回值必须被消费?

A 结果更准确
B JIT 死代码消除,删除计算,测不到真实工作量 ✓ 正确答案
C 无影响
D 崩溃
#

10. JMH 的 Fork/Warmup/Iteration 配置,多轮预热与统计(误差/置信区间)如何影响结果可信度?

A 误差(score error)与置信区间 ✓ 正确答案
B 最大值
C 单次值
D 线程数
#

11. JMH 的基准类型,吞吐量/平均时间/采样时间的适用场景如何?

A Throughput
B SingleShotTime
C AverageTime
D SampleTime ✓ 正确答案
#

12. @OperationsPerInvocation 在多操作基准(批量处理)中的统计含义

A 声明一次调用代表 N 次操作,使吞吐/时间统计正确 ✓ 正确答案
B 增加线程
C 设置 fork
D 设置参数
#

13. JMH 的参数化,@Param 与命令行参数

A 指定模式
B 指定线程
C 指定 fork
D 指定参数值 ✓ 正确答案
#

14. JMH 与生产环境差异,JIT 编译、分支预测与 GC 对微基准结果的误导,如何用宏观基准交叉验证?

A 数据太大
B JIT 内联/分支预测/GC 场景与生产不同 ✓ 正确答案
C 线程太多
D 编译错误
#

15. JMH 的 @State 与 @BenchmarkMode,基准隔离与 JIT 预热的关系如何?

A 增加线程
B 减少状态
C 让 JIT 充分编译优化,到达稳态 ✓ 正确答案
D 设置堆
#

16. JMH 结果的可比性,机器差异、JIT 状态与基准漂移如何控制?

A 固定环境、稳态与统计显著性 ✓ 正确答案
B 不同机器对比
C 增加线程
D 减少 fork
#

17. JMH 的 @Fork 与 @Warmup,隔离 JIT 状态与结果稳定性的作用如何?

A 增加线程
B 设置堆
C 减少代码
D 在独立 JVM 隔离 JIT/GC 状态 ✓ 正确答案
#

18. JMH 的 @Setup/@TearDown 生命周期(Trial/Iteration/Invocation)与使用限制

A 每次操作
B 不执行
C 每次迭代
D 整个基准(所有 fork/迭代)前后各一次 ✓ 正确答案