我得到了下面的汇编列表作为我的java程序的JIT编译的结果.
mov 0x14(%rsp),%r10d
inc %r10d
mov 0x1c(%rsp),%r8d
inc %r8d
test %eax,(%r11) ; <--- this instruction
mov (%rsp),%r9
mov 0x40(%rsp),%r14d
mov 0x18(%rsp),%r11d
mov %ebp,%r13d
mov 0x8(%rsp),%rbx
mov 0x20(%rsp),%rbp
mov 0x10(%rsp),%ecx
mov 0x28(%rsp),%rax
movzbl 0x18(%r9),%edi
movslq %r8d,%rsi
cmp 0x30(%rsp),%rsi
jge 0x00007fd3d27c4f17
Run Code Online (Sandbox Code Playgroud)
我对这test
条指令的理解在这里没用,因为测试的主要思想是
标志SF,ZF,PF被修改,而AND的结果被丢弃.
这里我们不使用这些结果标志.
这是JIT中的错误还是我错过了什么?如果是,报告的最佳位置在哪里?谢谢!
我为我关于 Aeron 的演示做了一些基准测试,但我发现如果我对相同的传输使用不同的工具,我得到的结果会略有不同。
例如,如果我使用HDR 直方图,我得到的结果与维护者在测试中得到的数字一致:
另外,我尝试了另一个很酷的 Java 基准库 - JLBH
但结果让我有点困惑......
首先,我得到了 2 个不同版本的基准测试:
似乎 JLBH 鼓励为侦听器使用另一个线程,至少这样一些设置(例如吞吐量)更有意义,并且初始预热会打印一些统计信息。但我可能是非常错误的,如果我是,请纠正我。
但更重要的是,这些基准测试的结果完全不同,与我在 HDR 上看到的结果不一致:
我很有可能在某个地方搞砸了,但就目前而言,所有 3 个基准测试看起来或多或少都与我相似,但使用不同的工具集。
非常感谢!
聚苯乙烯
如果有人想自己尝试这个,你必须运行这个脚本https://github.com/easy-logic/transport-benchmarks/blob/master/run-aeron.sh
要选择要运行的版本,请mainClassName
在此处更改参数:https :
//github.com/easy-logic/transport-benchmarks/blob/master/aeron-ping/build.gradle#L6
有3个选项: