我注意到if else/ 三元 ( condition ? a : b) 赋值比ifonly 语句中的条件赋值更快。我在不同的 JDK 上执行了 JMH 基准测试,但我将专注于 JDK 12。
源代码:
@State(Scope.Benchmark)
public class FindMaxBenchmark {
public static int SIZE = 1_000_000;
@Benchmark
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public static void findMax_if(Blackhole bh, Mock mock) {
int result = Integer.MIN_VALUE;
int[] data = mock.tab;
for (int i = 0; i < data.length; i++) {
if (data[i] > result) {
result = data[i];
}
}
bh.consume(result);
}
@Benchmark
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public static void …Run Code Online (Sandbox Code Playgroud)
我无法计算出现代 PC 中 cpu 和 cpu 缓存之间的总线宽度。我在互联网上没有找到任何可靠的东西。我所拥有的只是Zen (AMD) 微架构的框图,其中表示 L1 和 L2 缓存每个周期可以传输 32B(256b)。我猜测总线宽度是 256 条线(假设单数据速率)。但是,存在双倍数据速率传输,例如内存控制器和 DDR 内存之间。
总结: