graal icon indicating copy to clipboard operation
graal copied to clipboard

[GR-10518] Native Image heap dumps are polluted by objects created during heap dump creation

Open fniephaus opened this issue 2 years ago • 1 comments

When dumping the heap of a native executable to analyze it in VisualVM, the heap dump is polluted by objects that are created during the heap dump creation.

This makes it hard to analyze smaller heap dumps, especially initial heaps obtained through -XX:+DumpHeapAndExit, as they are often dominated by the objects created during heap dump creation. Here's an example screenshot of a heap dump for a native HelloWorld: Screenshot from 2022-06-10 14-45-41

The heap dump pollution can be avoided by using only unmanaged, native memory within the heap dump writer rather than managed, heap-allocated objects.

fniephaus avatar Jun 10 '22 12:06 fniephaus

It seems that the heap dump writer also allocates numerous strings and other objects. Most notably, it seems to allocate 5700+ strings with a value of utf-8:

image

fniephaus avatar Jun 10 '22 12:06 fniephaus

How about writing out the metadeta (HeapdumpWriterImpl) needed to write the hprof file to an extra file during generation, later on, when an dump should happen, the file will be mapped into memory and used to write the hprof file.

SergejIsbrecht avatar Feb 17 '23 19:02 SergejIsbrecht