in src/sizes/retained_size_action.cpp [59:77]
jint JNICALL visitReference(jvmtiHeapReferenceKind refKind, const jvmtiHeapReferenceInfo *refInfo, jlong classTag,
jlong referrerClassTag, jlong size, jlong *tagPtr,
jlong *referrerTagPtr, jint length, void *userData) {
if (refKind == JVMTI_HEAP_REFERENCE_JNI_LOCAL || refKind == JVMTI_HEAP_REFERENCE_JNI_GLOBAL ||
handleReferrersWithNoInfo(referrerTagPtr, tagPtr)) {
return JVMTI_VISIT_OBJECTS;
} else if (*tagPtr == 0) {
*tagPtr = pointerToTag(tagToPointer(*referrerTagPtr)->share());
} else if (isTagWithNewInfo(*tagPtr)) {
*tagPtr = pointerToTag(tagToPointer(*referrerTagPtr)->share());
tagsWithNewInfo.insert(*tagPtr);
} else if (tagsAreValidForMerge(*tagPtr, *referrerTagPtr)) {
tagsWithNewInfo.erase(*tagPtr);
*tagPtr = pointerToTag(merge(*tagPtr, *referrerTagPtr));
tagsWithNewInfo.insert(*tagPtr);
}
return JVMTI_VISIT_OBJECTS;
}