[讨论] 讨论一个演示低开销抛异常的microbenchmark

RednaxelaFX 2011-07-14
Alex Turner发了一帖演示“滥用”异常来操纵控制流的性能可以很高。(打不开链接的话请自备梯子…)

在原帖里作者做了个非常简单的microbenchmark,并导出一个结论:
Alex Turner 写道
The amazing thing in the example code is that on the 1.7 JVM on Linux 64 bit I am using, the method using the return dispatch approach runs FASTER than the one with normal return.

他认为在他的测试里,抛异常的版本比不抛异常的版本还要快。

事实上这当然是有问题的解读。而这又是一个表现了microbenchmark很难写对的活生生的例子。
不过要正确理解为什么这个microbenchmark能跑出这样的结果却是件有趣的事:
Alex Turner 写道
Dispatch:    477
No Dispatch: 713
40000000000


有兴趣的同学可以来尝试分析一下

这里涉及到OSR对microbenchmark的影响。不过常见的测试代码问题是同样在main()里跑两个大循环,由于OSR编译的影响,后一个循环通常比前一个循环快。这个例子则正好相反,数据显示前一个循环比后一个循环还要快。而这正是这个例子有趣的地方。

我的分析已经发在一个gist里了。不想被剧透的同学就先不要打开这个链接~
Global site tag (gtag.js) - Google Analytics