> This is subtask of JDK-8299426: Heap dump does not contain virtual Thread > stack references > The change: > - reorganize thread-related code/prepare it to use for unmounted vthreads: > - new ThreadDumper class caches stack frames, thread serial num, frame > serial number (trace serial number is calculated from thread serial); > ThreadDumper objects for all platform/carrier and mounted virtual threads > are cached instead of ThreadStackTrace objects (they are created during > HPROF_FRAME/HPROF_TRACE dumping, used lated for writing > HPROF_GC_ROOT_THREAD_OBJ/HPROF_GC_ROOT_JAVA_FRAME/HPROF_GC_ROOT_JNI_LOCAL > subrecords); > - new helper class JavaStackRefDumper to dump references from threadf stack; > - separate track traces for mounted virtual threads: > - separate HPROF_FRAME/HPROF_TRACE records for mounted vthreads and carrier > threads; > - separate > HPROF_GC_ROOT_THREAD_OBJ/HPROF_GC_ROOT_JAVA_FRAME/HPROF_GC_ROOT_JNI_LOCAL > subrecords; > - updated hprof parser test lib to collect data about threads > (HPROF_GC_ROOT_THREAD_OBJ subrecords) and corresponding stack traces and > stack references. > > Testing - tier1-tier3, new test > > Output of the test for VtreadInHeapDumpTarg$VthreadMounted thread > without the fix: > `thread 0x8101be90, 16 frames > - [0] VtreadInHeapDumpTarg$VthreadMounted.run()V (VtreadInHeapDump.java:127) > Java Local Reference: VtreadInHeapDumpTarg$VthreadMounted > Java Local Reference: VtreadInHeapDumpTarg$VThreadMountedReferenced > - [1] java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V > (Thread.java:1583) > Java Local Reference: java.lang.VirtualThread > Java Local Reference: java.lang.Class > Java Local Reference: VtreadInHeapDumpTarg$VthreadMounted > - [2] java.lang.VirtualThread.run(Ljava/lang/Runnable;)V > (VirtualThread.java:309) > Java Local Reference: java.lang.VirtualThread > Java Local Reference: VtreadInHeapDumpTarg$VthreadMounted > Java Local Reference: java.lang.Class > - [3] java.lang.VirtualThread$VThreadContinuation$1.run()V > (VirtualThread.java:190) > Java Local Reference: java.lang.VirtualThread$VThreadContinuation$1 > - [4] jdk.internal.vm.Continuation.enter0()V (Continuation.java:320) > Java Local Reference: java.lang.VirtualThread$VThreadContinuation > - [5] jdk.internal.vm.Continuation.enter(Ljdk/internal/vm/Continuation;Z)V > (Continuation.java:312) > Java Local Reference: java.lang.VirtualThread$VThreadContinuation > - [6] > jdk.internal.vm.Continuation.enterSpecial(Ljdk/internal/vm/Continuatio...
Alex Menkov has updated the pull request incrementally with one additional commit since the last revision: David's feedback ------------- Changes: - all: https://git.openjdk.org/jdk/pull/15869/files - new: https://git.openjdk.org/jdk/pull/15869/files/f2d3c374..2de09397 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=15869&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=15869&range=00-01 Stats: 26 lines in 3 files changed: 0 ins; 17 del; 9 mod Patch: https://git.openjdk.org/jdk/pull/15869.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/15869/head:pull/15869 PR: https://git.openjdk.org/jdk/pull/15869