< prev index next >

src/java.base/share/classes/java/lang/ref/Finalizer.java

Print this page

        

*** 25,34 **** --- 25,38 ---- package java.lang.ref; import java.security.PrivilegedAction; import java.security.AccessController; + import java.util.Arrays; + import java.util.HashMap; + import java.util.Map; + import sun.misc.JavaLangAccess; import sun.misc.ManagedLocalsThread; import sun.misc.SharedSecrets; import sun.misc.VM;
*** 184,193 **** --- 188,220 ---- } f.runFinalizer(jla); }}}); } + static String printFinalizationQueue() { + Map<String, int[]> countMap = new HashMap<>(); + queue.forEach(r -> { + Object referent = r.get(); + if (referent != null) { + countMap.computeIfAbsent( + referent.getClass().getName(), k -> new int[1])[0]++; + } + }); + @SuppressWarnings("unchecked") + Map.Entry<String, int[]>[] entries = countMap.entrySet().toArray( + new Map.Entry[countMap.size()] + ); + Arrays.sort(entries, (e1, e2) -> + Integer.compare(e2.getValue()[0], e1.getValue()[0])); + StringBuilder sb = new StringBuilder(); + for (Map.Entry<String, int[]> e : entries) { + sb.append("Class: ").append(e.getKey()) + .append(" count: ").append(e.getValue()[0]).append("\n"); + } + return sb.toString(); + } + private static class FinalizerThread extends ManagedLocalsThread { private volatile boolean running; FinalizerThread(ThreadGroup g) { super(g, "Finalizer"); }
< prev index next >