RFR: JDK-8266503: [ul] Make Decorations safely copy-able and reduce their size
Xin Liu
xliu at openjdk.java.net
Wed May 5 00:07:50 UTC 2021
On Tue, 4 May 2021 19:57:45 GMT, Xin Liu <xliu at openjdk.org> wrote:
>> In Universal Logging, class LogDecorations keeps resolved decorations as well as a lookup table of pointers to the start of each resolved decoration, by decorator. This is dangerous, since it makes object copy non-trivial (the pointers would need to be relocated). It is also wasteful since we spend 8 bytes per pointer per index.
>>
>> Better would be to use a numerical index array of offset values, which could be safely copied.
>>
>> And since the resolve buffer is 256 char, we can easily make this index an 8-bit value, which reduces the size of a LogDecorations object down to 280 bytes (from 368). Size matters especially in the context of JDK-8229517.
>>
>> The patch also adds a gtest, which tests that decorations are safely copy-able and that decorator resolution works as expected.
>>
>> Testing:
>> - manually jtreg runtime/logging
>> - manually gtests
>> - Will run more tests tonight
>
> src/hotspot/share/logging/logDecorations.hpp line 43:
>
>> 41: typedef uint8_t offset_t;
>> 42: static const offset_t invalid_offset = DecorationsBufferSize - 1;
>> 43: offset_t _decoration_offset[LogDecorators::Count];
>
> This is less flexible than before. the type uint8_t limits the size of _decorations_buffer is lesser than 256. it's impossible to stretch _decorations_buffer. Further, we should avoid implicit assumption between DecorationsBufferSize and uint8_t.
I see that you have a statement. It does check offset_t is wide enough to represent DecorationsBufferSize.
static const offset_t invalid_offset = DecorationsBufferSize - 1;
``
-------------
PR: https://git.openjdk.java.net/jdk/pull/3855
More information about the hotspot-runtime-dev
mailing list