RFR: 8257234 : Add gz option to SA jmap to write a gzipped heap dump [v7]
Chris Plummer
cjplummer at openjdk.java.net
Tue Jan 19 22:01:53 UTC 2021
On Tue, 19 Jan 2021 12:39:12 GMT, Lin Zang <lzang at openjdk.org> wrote:
>> 8257234 : Add gz option to SA jmap to write a gzipped heap dump
>
> Lin Zang has updated the pull request incrementally with one additional commit since the last revision:
>
> fix issue of setting gz option with no value
I think you need to add some additional testing. You can use ClhsdbDumpheap.java and also BasicJMapTest.java. Besides testing with a compressed hprof file, also add a test for "gz=" with no compression value and with invalid compression value.
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java line 1792:
> 1790: return;
> 1791: }
> 1792: if (keyValue[0].equals("gz")) {
This code now assumes there will be a `gz` option specified. If there isn't, you will still execute this section of code, and get an NPE at this point.
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 403:
> 401: VM vm = VM.getVM();
> 402:
> 403: // Check weather we should dump the heap as segments
Should be "whether"
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 475:
> 473: if (!useSegmentedHeapDump) {
> 474: // Fill in final length
> 475: fillInHeapRecordLength();
It's unclear to me why this code is now conditional on not using a segmented heap dump.
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 1307:
> 1305:
> 1306: /**
> 1307: * The class implements a buffered output stream for segment data dump.
Should be "segmented data dump"
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 1309:
> 1307: * The class implements a buffered output stream for segment data dump.
> 1308: * It is used inside HeapHprofBinWritter only for heap dump.
> 1309: * Because the current implementation of segment heap dump needs to update
"segmented"
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 1316:
> 1314: * If the data to be written are larger than internal buffer, or the internal buffer
> 1315: * is full, the internal buffer will be extend to a larger one.
> 1316: * This class defines a switch to turn on/off the segment mode. if turned off,
"segmented". Also, uppercase "If".
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 1317:
> 1315: * is full, the internal buffer will be extend to a larger one.
> 1316: * This class defines a switch to turn on/off the segment mode. if turned off,
> 1317: * it behaves same as BufferedOutputStream.
"the same as"
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 517:
> 515:
> 516: private void fillInHeapRecordLength() throws IOException {
> 517: assert !useSegmentedHeapDump : "fillInHeapRecordLength is not supported for segment heap dump";
"segmented heap dump"
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 1321:
> 1319: private class SegmentedOutputStream extends BufferedOutputStream {
> 1320: /**
> 1321: * Creates a new buffered output stream to support segment heap dump data.
"segmented"
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 1335:
> 1333:
> 1334: /**
> 1335: * Creates a new buffered output stream to support segment heap dump data.
"segmented"
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java line 1493:
> 1491: // Segment support.
> 1492: private boolean segmentMode;
> 1493: private boolean allowSegmental;
"allowSegmented" would be a better name.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1712
More information about the serviceability-dev
mailing list