RFR: 8252842: Extend jmap to support parallel heap dump [v32]

Lin Zang lzang at openjdk.java.net
Tue Sep 14 14:20:15 UTC 2021


On Wed, 8 Sep 2021 13:39:08 GMT, Ralf Schmelter <rschmelter at openjdk.org> wrote:

>> Lin Zang has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   fix build error
>
> src/hotspot/share/services/attachListener.cpp line 255:
> 
>> 253:     HeapDumper dumper(live_objects_only /* request GC */);
>> 254:     dumper.dump(path, out, (int)level, (uint)parallel_thread_num);
>> 255:   }
> 
> The call signature for dump has changed, since it now takes an overwrite bool value after the compression level. This means that actually the number of parallel threads is not set but remains at the default value of 1. So the parallel case  is never executed currently.

The parallel threads number is set to `MAX2<uint>(1, (uint)os::initial_active_processor_count() * 3 / 8);` after the change.

> src/hotspot/share/services/heapDumperCompression.cpp line 386:
> 
>> 384:   size_t tmp_max = 0;
>> 385: 
>> 386:   MonitorLocker ml(_lock, Mutex::_no_safepoint_check_flag);
> 
> This is not thread safe if flush_external_buffer() or get_new_buffer() are called concurrently. But it seems to be Ok since flush_external_buffer() is only called with the _lock var of the parallel writer locked, so there is no contention. Is this correct?

Yes, it is correct.

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

PR: https://git.openjdk.java.net/jdk/pull/2261


More information about the serviceability-dev mailing list