RFR: 8334229: Optimize InterpreterOopMap layout [v2]
David Holmes
dholmes at openjdk.org
Wed Jul 3 03:04:22 UTC 2024
On Mon, 1 Jul 2024 21:53:52 GMT, Xiaolong Peng <xpeng at openjdk.org> wrote:
>> Hi all,
>> This PR is re-arrange the fields in InterpreterOopMap to optimize the layout of the class; by moving ```unsigned short _bci ``` to the place after ```int _expression_stack_size```, and ```int _num_oops``` to the place before ```intptr_t _bit_mask[4];```, most of the holes are removed.
>>
>> Layout before the fix:
>>
>> (gdb) ptype /xo InterpreterOopMap
>> /* offset | size */ type = class InterpreterOopMap : private ResourceObj {
>> private:
>> /* 0x0000 | 0x0008 */ class Method *_method;
>> /* 0x0008 | 0x0002 */ unsigned short _bci;
>> /* XXX 2-byte hole */
>> /* 0x000c | 0x0004 */ int _mask_size;
>> /* 0x0010 | 0x0004 */ int _expression_stack_size;
>> protected:
>> /* XXX 4-byte hole */
>> /* 0x0018 | 0x0020 */ intptr_t _bit_mask[4];
>> /* 0x0038 | 0x0004 */ int _num_oops;
>> /* XXX 4-byte padding */
>>
>> /* total size (bytes): 64 */
>> }
>>
>>
>> After fix:
>>
>> (gdb) ptype /xo InterpreterOopMap
>> /* offset | size */ type = class InterpreterOopMap : private ResourceObj {
>> private:
>> /* 0x0000 | 0x0008 */ class Method *_method;
>> /* 0x0008 | 0x0004 */ int _mask_size;
>> /* 0x000c | 0x0004 */ int _expression_stack_size;
>> /* 0x0010 | 0x0002 */ unsigned short _bci;
>> protected:
>> /* XXX 2-byte hole */
>> /* 0x0014 | 0x0004 */ int _num_oops;
>> /* 0x0018 | 0x0020 */ intptr_t _bit_mask[4];
>>
>> /* total size (bytes): 56 */
>> }
>>
>>
>> (Also moved ```bool _resource_allocate_bit_mask``` to before ```intptr_t _bit_mask[4];```, so it will use 1 byte of the 2-byte hole, resulting in 1 byte hole in fastdebug build.)
>>
>> Layout in fastdebug build:
>>
>> (gdb) ptype /xo InterpreterOopMap
>> /* offset | size */ type = class InterpreterOopMap : private ResourceObj {
>> private:
>> /* 0x0000 | 0x0008 */ class Method *_method;
>> /* 0x0008 | 0x0004 */ int _mask_size;
>> /* 0x000c | 0x0004 */ int _expression_stack_size;
>> /* 0x0010 | 0x0002 */ unsigned short _bci;
>> protected:
>> /* 0x0012 | 0x0001 */ bool _resource_allocate_bit_mask;
>> /* XXX 1-byte hole */
>> /* 0x0014 |...
>
> Xiaolong Peng has updated the pull request incrementally with one additional commit since the last revision:
>
> Move _resource_allocate_bit_mask to the place before _num_oops for better layout in debug build
Looks fine.
@pengxiaolong note that Hotspot generally requires two reviewers (even though git marks the PR ready with one) unless you indicate this is a trivial PR and the one Reviewer agrees.
Thanks
-------------
Marked as reviewed by dholmes (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/19979#pullrequestreview-2155236780
More information about the hotspot-runtime-dev
mailing list