src/java.base/share/classes/java/lang/ref/Finalizer.java
Print this page
@@ -28,10 +28,13 @@
import java.security.PrivilegedAction;
import java.security.AccessController;
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<Object> { /* Package-private; must be in
same package as the Reference
class */
@@ -85,10 +88,40 @@
/* Invoked by VM */
static void register(Object finalizee) {
new Finalizer(finalizee);
}
+ static String printFinalizationQueue() {
+ Finalizer tmp = unfinalized;
+ Map <String, Integer> countMap = new TreeMap<String, Integer>();
+ 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<String> 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;
remove();
}