RFR: 8342826: Improve performance of oopDesc::klass() after JDK-8305895 [v2]
Coleen Phillimore
coleenp at openjdk.org
Thu Nov 14 22:24:18 UTC 2024
On Thu, 14 Nov 2024 16:51:35 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
>> 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
> ...
Ok, that's surprising to me. You can change it back.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/22020#discussion_r1842957257
More information about the hotspot-runtime-dev
mailing list