public void processObject(Object object, String group, boolean addObject, ObjectFilter objectFilter, FieldFilter fieldFilter) { if (object != null) { processObject(heap.objects.get(object), group, addObject, 1, objectFilter, fieldFilter); } }
public void processType(Class<?> clazz, String group, boolean addObject, ObjectFilter objectFilter, FieldFilter fieldFilter) { for (ObjectInfo info : objects) { if (clazz.isInstance(info.getObject())) { processObject(info, group, addObject, 1, objectFilter, fieldFilter); } } }
processObject(DynamicHubSupport.getReferenceMapEncoding(), "DynamicHub", true, null, null); processObject(CodeInfoTable.getImageCodeCache(), "ImageCodeInfo", true, ObjectGroupHistogram::filterCodeInfoObjects, null); processObject(readGraalSupportField("graphEncoding"), "CompressedGraph", true, ObjectGroupHistogram::filterGraalSupportObjects, null); processObject(readGraalSupportField("graphObjects"), "CompressedGraph", true, ObjectGroupHistogram::filterGraalSupportObjects, null); processObject(readGraalSupportField("graphNodeTypes"), "CompressedGraph", true, ObjectGroupHistogram::filterGraalSupportObjects, null); Field field = Class.forName("com.oracle.svm.graal.SubstrateRuntimeProvider").getDeclaredField("graphObjects"); Object object = SubstrateObjectConstant.asObject(heap.getMetaAccess().lookupJavaField(field).readValue(null)); processObject(heap.objects.get(object), "CompressedGraphObjects", true, null, ObjectGroupHistogram::filterObjectConstantField); } catch (Throwable ex) {
private void processObject(ObjectInfo info, String group, boolean addObject, int recursionLevel, ObjectFilter objectFilter, FieldFilter fieldFilter) { if (objectFilter != null && !objectFilter.test(info, recursionLevel)) { return; } assert info != null; if (addObject) { if (!addToGroup(info, group)) { return; } } if (info.getClazz().isInstanceClass()) { JavaConstant con = SubstrateObjectConstant.forObject(info.getObject()); for (HostedField field : info.getClazz().getInstanceFields(true)) { if (field.getType().getStorageKind() == JavaKind.Object && !HybridLayout.isHybridField(field) && field.isAccessed()) { if (fieldFilter == null || fieldFilter.test(info, field)) { Object fieldValue = SubstrateObjectConstant.asObject(field.readStorageValue(con)); if (fieldValue != null) { processObject(heap.objects.get(fieldValue), group, true, recursionLevel + 1, objectFilter, fieldFilter); } } } } } else if (info.getObject() instanceof Object[]) { for (Object element : (Object[]) info.getObject()) { if (element != null) { processObject(heap.objects.get(element), group, true, recursionLevel + 1, objectFilter, fieldFilter); } } } }