On Wed, 29 May 2024 02:03:42 GMT, Chris Plummer <[email protected]> wrote:
>> The fix updates HeapMerger to use writer buffer (no need to copy memory,
>> also writer buffer is 1MB instead of 4KB).
>> Additionally fixed small issue in FileWriter (looks like `ssize_t` instead
>> of `size_t` is a typo, the argument should be unsigned)
>>
>> Testing: all HeapDump-related tests on Oracle supported platforms
>
> src/hotspot/share/services/heapDumper.cpp line 2137:
>
>> 2135: while ((cnt = segment_fs.read(_writer->buffer(), 1,
>> _writer->buffer_size())) != 0) {
>> 2136: _writer->set_position(cnt);
>> 2137: _writer->flush();
>
> Why flush on each iteration instead of just once after you are done with the
> loop?
Standard way to use AbstractDumpWriter is to use
`AbstractDumpWriter::write_XXX` methods (they all call `write_raw(const void*
s, size_t len)` which copies data from the provided memory to
`_writer->buffer()`, and flushes when the buffer is full)
This code uses writer internals - on each iteration we read up to 1MB from
`segment_fs` directly to `_writer->buffer()`, so we need to flush it before
performing next read, otherwise data in the buffer will be overridden.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/18850#discussion_r1619412072