in src/sizes/retained_size_by_classes.cpp [78:93]
jvmtiError RetainedAndShallowSizeByClassesAction::getShallowAndRetainedSizeByClasses(jobjectArray classesArray,
std::vector<jlong> &shallowSizes,
std::vector<jlong> &retainedSizes) {
jvmtiError err = tagObjectsOfClasses(classesArray);
if (!isOk(err)) return err;
if (shouldStopExecution()) return MEMORY_AGENT_INTERRUPTED_ERROR;
err = tagHeap();
if (!isOk(err)) return err;
if (shouldStopExecution()) return MEMORY_AGENT_INTERRUPTED_ERROR;
retainedSizes.resize(env->GetArrayLength(classesArray));
shallowSizes.resize(env->GetArrayLength(classesArray));
std::pair<jlong *, jlong *> arrays = std::make_pair(shallowSizes.data(), retainedSizes.data());
return IterateThroughHeap(JVMTI_HEAP_FILTER_UNTAGGED, nullptr, visitObjectForShallowAndRetainedSize, &arrays, "calculate shallow and retained sizes");
}