Вы измеряете пустые тесты , а не пустые методы. Другими словами, измерение минимального кода инфраструктуры, который обрабатывает сам тест. Это легко разобрать, потому что вы ожидаете только несколько инструкций по горячему пути. -prof perfasm
или -prof xperfasm
от JMH дадут вам самые горячие инструкции в считанные секунды.
Я думаю, что эффект связан с локальными рукопожатиями (JEP 312) , см .:
8u191: 0,389 ± 0,029 нс / оп
[пока все хорошо]
3.60% ↗ ...a2: movzbl 0x94(%r8),%r10d
0.63% │ ...aa: add $0x1,%rbp
32.82% │ ...ae: test %eax,0x1765654c(%rip) ; global safepoint poll
58.14% │ ...b4: test %r10d,%r10d
╰ ...b7: je ...a2
11.0.2: 0,585 ± 0,014 нс / операция [упс, регрессия]
0.31% ↗ ...70: movzbl 0x94(%r9),%r10d
0.19% │ ...78: mov 0x108(%r15),%r11 ; reading the thread-local poll addr
25.62% │ ...7f: add $0x1,%rbp
35.10% │ ...83: test %eax,(%r11) ; thread-local safepoint poll
34.91% │ ...86: test %r10d,%r10d
╰ ...89: je ...70
11.0.2, -XX: -ThreadLocalHandshakes: 0,399 ± 0,048 нс / операция [возврат к 8u перф.]
5.64% ↗ ...62: movzbl 0x94(%r8),%r10d
0.91% │ ...6a: add $0x1,%rbp
34.36% │ ...6e: test %eax,0x179be88c(%rip) ; global safepoint poll
54.79% │ ...74: test %r10d,%r10d
╰ ...77: je ...62
Я думаю, что это в основном видно в таких узких петлях.
UPD: надеюсь, подробнее здесь .