--- old/src/java.base/share/classes/java/lang/ref/Finalizer.java 2015-05-05 12:41:21.704935336 +0300 +++ new/src/java.base/share/classes/java/lang/ref/Finalizer.java 2015-05-05 12:41:21.332926798 +0300 @@ -30,6 +30,9 @@ import sun.misc.JavaLangAccess; import sun.misc.SharedSecrets; import sun.misc.VM; +import java.util.TreeMap; +import java.util.Set; +import java.util.Map; final class Finalizer extends FinalReference { /* Package-private; must be in same package as the Reference @@ -87,6 +90,36 @@ new Finalizer(finalizee); } + static String printFinalizationQueue() { + Finalizer tmp = unfinalized; + Map countMap = new TreeMap(); + synchronized (lock) { + while(tmp != null) { + Object referent = tmp.get(); + if (referent != null) { + Class objClass = referent.getClass(); + String className = objClass.getName(); + Integer cnt = countMap.get(className); + if (cnt == null) { + countMap.put(className,1); + } + else { + countMap.put(className,cnt + 1); + } + } + tmp = tmp.next; + } + } + + StringBuilder sb = new StringBuilder(); + Set keys = countMap.keySet(); + for (String key : keys) { + sb.append("Class: " + key + " count: " + countMap.get(key) + "\n"); + } + + return sb.toString(); + } + private void runFinalizer(JavaLangAccess jla) { synchronized (this) { if (hasBeenFinalized()) return;