RFR: 8299414: JVMTI FollowReferences should support references from VirtualThread stack [v19]
Serguei Spitsyn
sspitsyn at openjdk.org
Thu May 11 01:29:09 UTC 2023
On Wed, 10 May 2023 23:41:07 GMT, Alex Menkov <amenkov at openjdk.org> wrote:
>> The fix updates JVMTI FollowReferences implementation to report references from virtual threads:
>> - unmounted vthreads are detected, their stack references for JVMTI_HEAP_REFERENCE_STACK_LOCAL/JVMTI_HEAP_REFERENCE_JNI_LOCAL;
>> - stacks of mounted vthreads are splitted into 2 parts (virtual thread stack and carrier thread stack), references are reported with correct thread id/class tag/object tags/frame depth;
>> - common code to handle stack frames are moved into separate class;
>>
>> Threads are reported as:
>> - platform threads: JVMTI_HEAP_REFERENCE_THREAD (as before);
>> - mounted vthreads (synthetic references, consider them as heap roots because carrier threads are roots): JVMTI_HEAP_REFERENCE_OTHER;
>> - unmounted vthreads: not reported as heap roots.
>
> Alex Menkov has updated the pull request incrementally with one additional commit since the last revision:
>
> some refactoring
>
> added StackRefCollector::process_frames;
> used single RegisterMap instance;
> used RegisterMap::WalkContinuation::include for RegisterMap;
src/hotspot/share/prims/jvmtiTagMap.cpp line 2258:
> 2256:
> 2257: bool set_thread(oop o);
> 2258: // sets the thread and reports the reference to it with the specified kind.
Could I ask you to polish comments a little bit?
Let's use the following Consistent Comment Rule (CCR):
If comment is started with a capitol letter then it should be ended with dot.
Otherwise, it should not be ended with dot.
I'll mark with CCR other comments that are inconsistent with CCR.
src/hotspot/share/prims/jvmtiTagMap.cpp line 2262:
> 2260:
> 2261: bool do_frame(vframe* vf);
> 2262: // handles frames until vf->sender() is null.
CCR
src/hotspot/share/prims/jvmtiTagMap.cpp line 2290:
> 2288: continue;
> 2289: }
> 2290:
Unneeded empty line.
src/hotspot/share/prims/jvmtiTagMap.cpp line 2312:
> 2310: } else {
> 2311: if (_last_entry_frame != nullptr) {
> 2312: // JNI locals for the entry frame
CCR
src/hotspot/share/prims/jvmtiTagMap.cpp line 2328:
> 2326: javaVFrame* jvf = javaVFrame::cast(vf);
> 2327:
> 2328: // the jmethodID
It is unlikely this comment helps.
src/hotspot/share/prims/jvmtiTagMap.cpp line 2341:
> 2339: }
> 2340:
> 2341: // Follow oops from compiled nmethod
CCR
src/hotspot/share/prims/jvmtiTagMap.cpp line 2797:
> 2795: // Reports the thread as JVMTI_HEAP_REFERENCE_THREAD,
> 2796: // walks the stack of the thread, finds all references (locals
> 2797: // and JNI calls) and reports these as stack references
CCR
src/hotspot/share/prims/jvmtiTagMap.cpp line 2829:
> 2827: RegisterMap::WalkContinuation::include);
> 2828:
> 2829: // first handle mounted vthread (if any).
CCR
src/hotspot/share/prims/jvmtiTagMap.cpp line 2833:
> 2831: frame f = java_thread->last_frame();
> 2832: vframe* vf = vframe::new_vframe(&f, ®_map, java_thread);
> 2833: // report virtual thread as JVMTI_HEAP_REFERENCE_OTHER.
CCR
src/hotspot/share/prims/jvmtiTagMap.cpp line 2838:
> 2836: }
> 2837: // split virtual thread and carrier thread stacks by vthread entry ("enterSpecial") frame,
> 2838: // consider vthread entry frame as the last vthread stack frame.
CCR
src/hotspot/share/prims/jvmtiTagMap.cpp line 2901:
> 2899: StackRefCollector stack_collector(tag_map(), &blk, nullptr);
> 2900: // reference to the vthread is already reported.
> 2901: if (!stack_collector.set_thread(vt)) {
CCR
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190539577
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190539725
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190539996
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190540181
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190540801
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190540873
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190541100
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190541281
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190541349
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190541442
PR Review Comment: https://git.openjdk.org/jdk/pull/13254#discussion_r1190541874
More information about the hotspot-dev
mailing list