--- old/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/memleak/ReferenceTreeObject.java 2018-11-27 11:32:07.000000000 +0530 +++ new/core/org.openjdk.jmc.flightrecorder/src/main/java/org/openjdk/jmc/flightrecorder/memleak/ReferenceTreeObject.java 2018-11-27 11:32:06.000000000 +0530 @@ -34,8 +34,11 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.openjdk.jmc.common.IMCOldObject; @@ -57,6 +60,7 @@ private final List children = new ArrayList<>(); private final Set items = new HashSet<>(); + private final Map leafNodes = new HashMap<>(); private String rootDescription; private IMCOldObject object; @@ -273,12 +277,42 @@ this.parent = parent; } + /** + * @return the Root object + */ + public ReferenceTreeObject getRootObject() { + if (this.parent == null) { + return this; + } else { + ReferenceTreeObject rto = this.parent; + while (rto.getParent() != null) { + rto = rto.getParent(); + } + return rto; + } + } + @Override public int getReferrerSkip() { return object.getReferrerSkip(); } /** + * @return Map containing allocation time and its leafnode object + */ + public Map getLeafNodes() { + return Collections.unmodifiableMap(leafNodes); + } + + /** + * @param leafNode + * Object which is leaked + */ + public void updateLeafNode(ReferenceTreeObject leafNode) { + leafNodes.put(leafNode.getTimestamp(), leafNode); + } + + /** * Returns a string representation of this object. * * @param displayFormatting