RFR: 8334229: Optimize InterpreterOopMap layout [v2]

duke duke at openjdk.org
Tue Jul 2 17:58:21 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

@pengxiaolong 
Your change (at version db1170ac01761843cae12d721016e3aac0711af6) is now ready to be sponsored by a Committer.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/19979#issuecomment-2203972114


More information about the hotspot-runtime-dev mailing list