RFR: 8342826: Improve performance of oopDesc::klass() after JDK-8305895 [v2]
Aleksey Shipilev
shade at openjdk.org
Thu Nov 14 16:55:19 UTC 2024
On Thu, 14 Nov 2024 11:58:40 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:
>> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Inline has_klass_gap()
>
> src/hotspot/share/oops/objLayout.hpp line 59:
>
>> 57: Compact,
>> 58: // +UseCompressedClassPointers (-UseCompactObjectHeaders)
>> 59: Compressed,
>
> Since Compressed is the most likely scenario, can you make this == 0?
Hilariously, it looks counter-productive, at least for my GCC builds. `Compressed` now does two jumps in trivial method that just calls to `oopDesc::klass()`.
`Compact = 0`, `Compressed = 1`:
Klass* oopDesc::klass_non_inlined() {
ab7: 55 push %rbp
ab8: 48 89 e5 mov %rsp,%rbp
switch (ObjLayout::klass_mode()) {
abb: 8b 00 mov (%rax),%eax
abd: 85 c0 test %eax,%eax
abf: 74 26 je ae7
ac1: 83 f8 01 cmp $0x1,%eax
ac4: 75 1b jne ae1
ac6: 8b 47 08 mov 0x8(%rdi),%eax ; <--- Compressed
ac9: 48 8b 15 00 00 00 00 mov 0x0(%rip),%rdx
return klass();
}
ad0: 5d pop %rbp
ad1: 8b 0a mov (%rdx),%ecx
ad3: 48 8b 15 00 00 00 00 mov 0x0(%rip),%rdx
ada: 48 d3 e0 shl %cl,%rax
add: 48 03 02 add (%rdx),%rax
ae0: c3 retq
return _metadata._klass;
ae1: 48 8b 47 08 mov 0x8(%rdi),%rax ; <--- Uncompressed
ae5: 5d pop %rbp
ae6: c3 retq
return *dest;
ae7: 48 8b 07 mov (%rdi),%rax
aea: 48 c1 e8 2a shr $0x2a,%rax ; <--- Compact
aee: eb d9 jmp ac9
```
`Compressed = 0`, `Compact= 1`:
Klass* oopDesc::klass_non_inlined() {
ab7: 55 push %rbp
ab8: 48 89 e5 mov %rsp,%rbp
switch (ObjLayout::klass_mode()) {
abb: 8b 00 mov (%rax),%eax
abd: 85 c0 test %eax,%eax
abf: 74 2a je aeb
ac1: 83 f8 01 cmp $0x1,%eax
ac4: 75 1f jne ae5
return *dest;
ac6: 48 8b 07 mov (%rdi),%rax
ac9: 48 c1 e8 2a shr $0x2a,%rax ; <--- Compact
acd: 48 8b 15 00 00 00 00 mov 0x0(%rip),%rdx
return klass();
}
ad4: 5d pop %rbp
ad5: 8b 0a mov (%rdx),%ecx
ad7: 48 8b 15 00 00 00 00 mov 0x0(%rip),%rdx
ade: 48 d3 e0 shl %cl,%rax
ae1: 48 03 02 add (%rdx),%rax
ae4: c3 retq
return _metadata._klass;
ae5: 48 8b 47 08 mov 0x8(%rdi),%rax ; <--- Uncompressed
ae9: 5d pop %rbp
aea: c3 retq
aeb: 8b 47 08 mov 0x8(%rdi),%eax ; <--- Compressed
aee: eb dd jmp acd
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/22020#discussion_r1842580536
More information about the hotspot-runtime-dev
mailing list