> The change impelements dumping of unmounted virtual threads data (stack
> traces and stack references).
> Unmounted vthreads can be detected only by iterating over the heap, but hprof
> stack trace records (HPROF_FRAME/HPROF_TRACE) should be written before
> HPROF_HEAP_DUMP/HPROF_HEAP_DUMP_SEGMENT.
> HeapDumper supports segment dump (parallel dump to separate files with
> subsequent file merge outside of safepoint), the fix switches HeapDumper to
> always use segment dump: 1st segment contains only non-heap data, other
> segments are used for dumping heap objects. For serial dumping
> single-threaded dumping is performed, but 2 segments are created anyway.
> When HeapObjectDumper detects unmounted virtual thread, it writes
> HPROF_FRAME/HPROF_TRACE records to the 1st segment ("global writer"), and
> writes thread object (HPROF_GC_ROOT_JAVA_FRAME) and stack references
> (HPROF_GC_ROOT_JAVA_FRAME/HPROF_GC_ROOT_JNI_LOCAL) to the HeapObjectDumper
> segment.
> As parallel dumpers may write HPROF_FRAME/HPROF_TRACE concurrently and
> VMDumper needs to write non-heap data before heap object dumpers can write
> virtual threads data, writing to global writer is protected with
> DumperController::_global_writer_lock.
>
> Testing: run tests which perform heap dump (in different scenarios):
> - test/hotspot/jtreg/serviceability
> - test/hotspot/jtreg/runtime/ErrorHandling
> - test/hotspot/jtreg/gc/epsilon
> - test/jdk/sun/tools/jhsdb
Alex Menkov has updated the pull request incrementally with two additional
commits since the last revision:
- feedback
- prepare_parallel_dum
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/16665/files
- new: https://git.openjdk.org/jdk/pull/16665/files/43268104..e1adc026
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=16665&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=16665&range=00-01
Stats: 19 lines in 1 file changed: 8 ins; 3 del; 8 mod
Patch: https://git.openjdk.org/jdk/pull/16665.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/16665/head:pull/16665
PR: https://git.openjdk.org/jdk/pull/16665