On Thu, 4 Feb 2021 23:23:41 GMT, Chris Plummer <[email protected]> wrote:
>> Thanks for the thorough list, I have tested most of them but not all. I will
>> cover them and update here later.
>>
>>> So really there are two implementations of heap dumping, one in the VM and
>>> one in SA, but a total of 5 ways to get to them. I'm just starting to get
>>> my head wrapped around all this myself. We've created a very confusing
>>> situation for us, and unfortunately I think some of the changes that got us
>>> here was driven by a goal to simply things.
>>
>> Yes, it makes me even curious about why there can be two different
>> implementation of them (one by C++ and one by Java), it seems we need
>> double the work of adding new options for those tools, like parallal for
>> jmap histo and dump, etc.
>
> One implementation is in the JVM itself, to be used when the JVM is still
> running well, and not just from command line tools. Heap dumping can also be
> triggered by the JVM itslef by setting flags like -XX:+HeapDumpBeforeFullGC.
> The other implementation is in SA, to be used on a core file or a hung JVM
> process, although it can also be used on a JVM that is still running well.
> BTW, there used to be a 3rd implementation. The old hprof profiler (a JVMTI
> agent) also was used to generate hprof files.
Hi Lin,
A week ago you replied that you are accepting the following suggested
refactoring:
/*
* Possible commands:
* dumpheap gz=1 file
* dumpheap gz=1
* dumpheap file
* dumpheap
*
* Use default filename if cntTokens == 0.
* Handle cases with cntTokens == 1 or 2.
*/
if (cntTokens > 2) {
err.println("Too big number of options: " + cntTokens);
usage();
return;
}
if (cntTokens >= 1) { // parse first argument which is
"gz=" option
String option = t.nextToken();
gzlevel = parseHeapDumpCompressionLevel(option);
if (gzlevel == 0) {
usage();
return;
}
filename = "heap.bin.gz";
}
if (cntTokens == 2) { // parse second argument which is
filename
filename = t.nextToken();
if (filename.startsWith("gz=")) {
err.println("Filename should not start with "gz=":
" + filename);
usage();
return;
}
}
But I still do not see it in the latest updates from you. It feels like there
is some misunderstanding and confusion.
Could you, please, clear this up?
Thanks,
Serguei
-------------
PR: https://git.openjdk.java.net/jdk/pull/1712