> 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

Reply via email to