in src/sizes/retained_size_via_dominator_tree.cpp [253:280]
jobjectArray RetainedSizesByClassViaDominatorTreeAction::constructResultObject(const std::vector<jobject> &objectsOfClass,
const std::vector<jlong> &retainedSizes,
const SizesViaDominatorTreeHeapDumpInfo &info,
jlong objectsLimit) {
size_t size = std::min(static_cast<size_t>(objectsLimit), objectsOfClass.size());
std::vector<jlong> shallowSizes;
std::vector<jlong> sortedRetainedSizes;
sortedRetainedSizes.reserve(size);
shallowSizes.reserve(size);
for (size_t i = 0; i < size; i++) {
jobject object = objectsOfClass[i];
jlong tag;
jvmti->GetTag(object, &tag);
sortedRetainedSizes.push_back(retainedSizes[tag]);
shallowSizes.push_back(info.sizes[tag]);
}
jobjectArray result = getObjectArrayOfSize(env, 3);
jobjectArray objects = getObjectArrayOfSize(env, size);
for (int i = 0; i < size; i++) {
env->SetObjectArrayElement(objects, i, objectsOfClass[i]);
}
env->SetObjectArrayElement(result, 0, objects);
env->SetObjectArrayElement(result, 1, toJavaArray(env, shallowSizes));
env->SetObjectArrayElement(result, 2, toJavaArray(env, sortedRetainedSizes));
return result;
}