java单元测试不负责性能测试,应使用jmh进行微基准测试;需用@benchmark替代@test,显式声明@state,fork新jvm进程,配置预热与测量轮次,并依场景选择mode.throughput等合适模式。

Java 中单元测试本身不承担性能与基准测试职责。它专注验证逻辑正确性,比如输入输出是否符合预期、边界条件是否处理得当。性能和基准测试是另一类目标明确、环境严苛的测量任务,必须用专用工具和方法,否则测出来的数字毫无参考价值。
别在 JUnit 里手写 System.nanoTime()
有人会在 @Test 方法里记录开始和结束时间,算差值。这种做法结果不可信:JIT 编译还没热起来,死代码可能被优化掉,GC 突然介入,预热缺失……所有这些都会让耗时数据严重失真,甚至快出几倍或慢出几倍。
用 JMH 做微基准测试
JMH(Java Microbenchmark Harness)是 OpenJDK 官方维护的微基准测试框架,专为 JVM 设计,能规避绝大多数测量陷阱。你需要做到:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不写 @Test,改用 @Benchmark 标记待测方法
- 不手动计时,把生命周期控制权交给 JMH
- 状态共享必须显式声明,用 @State 注解明确作用域(如 Scope.Benchmark 或 Scope.Thread)
- 每次运行都 fork 新 JVM 进程,避免残留状态干扰
- 配置足够轮次的预热(Warmup)和正式测量(Measurement)
基础配置步骤
Maven 依赖要加全: ```xml选对测试模式
JMH 提供多种 Mode,按需选用: - Mode.Throughput:单位时间内执行多少次(适合吞吐量对比) - Mode.AverageTime:每次执行平均耗时(适合延迟敏感场景) - Mode.SampleTime:采样每次执行时间,给出分布统计(含 p90、p99) - Mode.SingleShotTime:单次执行耗时(适合冷启动类操作)测试结果包含平均值、标准差、误差范围,不是单个数字,而是有统计意义的一组数据。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










