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