RFR: 8293170: Improve encoding of the debuginfo nmethod section [v2]
Boris Ulasevich
bulasevich at openjdk.org
Fri Jul 21 11:03:35 UTC 2023
On Thu, 6 Jul 2023 22:32:41 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:
>> Boris Ulasevich has updated the pull request incrementally with one additional commit since the last revision:
>>
>> addressing review comments: super call, clarifying, and adding tests
>
> src/hotspot/share/code/compressedStream.hpp line 118:
>
>> 116: bool handle_zero(juint value) {
>> 117: if (value == 0) {
>> 118: _zero_count = (_zero_count == 0xFF) ? 0 : _zero_count;
>
> The case of `_zero_count` overflow is not clear. Apparently, I'm missing something here.
> Current code is just clearing the previously counted `_zero_count`.
> I'd expect some action like storing the current number of zeros or advancing the `_position`.
> Do you have a test for this?
Good question. It works like this. On each write(), values are stored in the array, either normally or as a chain optimization (two bytes: zero byte and a number of zeros). When we get another zero value, the chain is updated. When the chain is full, we exit this function and the value is written by UNSIGNED5::write_uint_grow().
To make things clear, I have updated this code:
- _zero_count = (_zero_count == 0xFF) ? 0 : _zero_count;
+ if (_zero_count == 0xFF) { // biggest zero chain length is 255
+ _zero_count = 1;
+ // for now, write it as an ordinary value (UNSINGED5 encodes zero int as a single byte)
+ // the new zero sequence is started if there are more than two zero values in a raw
+ return false;
+ }
Plus, I have added gtests to check this.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/12387#discussion_r1270543845
More information about the serviceability-dev
mailing list