简短结论:Java 的 assert 断言不适合、也不能用来“测试性能”。
下面详细说一下原因和正确做法。
assert 不能测性能assert 的设计目的不是性能测试assert 的作用是程序内部逻辑校验(调试/防御性编程),例如:
assert x > 0 : "x must be positive";
它用于:
而不是:
assert 默认是关闭的Java 中 assert 默认不启用,需要加 JVM 参数:
java -ea MyApp
这意味着:
assert 本身没有时间统计能力assert 只是一个布尔判断:
assert System.nanoTime() - start < 1000;
这只能“判断”是否超时,但:
而且断言失败时直接抛 AssertionError,程序可能直接中断。
你可能写成:
long start = System.nanoTime();
doSomething();
long cost = System.nanoTime() - start;
assert cost < 10_000_000 : "too slow: " + cost;
问题是:
long start = System.nanoTime();
method();
long cost = System.nanoTime() - start;
System.out.println("cost = " + cost + " ns");
⚠️ 注意:
@Test
@Timeout(1) // 秒
void testPerformance() {
method();
}
这是“功能级超时”,不是性能基准。
JMH(Java Microbenchmark Harness)
@Benchmark
public void testMethod() {
method();
}
优点:
Java 的
assert只能判断“逻辑对不对”,不能衡量“程序快不快”。
如果你愿意,我可以:
assert 改成 性能测试代码你现在是想“防止方法太慢”还是“做完整性能测试”?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。