OSDN Git Service

Run finalizers before counting for StrictMode.
authorJeff Sharkey <jsharkey@android.com>
Thu, 16 Jan 2014 20:46:37 +0000 (12:46 -0800)
committerJeff Sharkey <jsharkey@android.com>
Thu, 16 Jan 2014 20:46:43 +0000 (12:46 -0800)
Otherwise we sometimes end up counting objects strongly referenced
by the finalizer queue, and falsely detecting an instance leak.

Bug: 12533002
Change-Id: I144c941a3dfb0cbb837b98e80d2f49ffc9ca13c7

core/java/android/os/StrictMode.java

index d794ca6..ea71ad8 100644 (file)
@@ -1449,7 +1449,11 @@ public final class StrictMode {
         if (policy.classInstanceLimit.size() == 0) {
             return;
         }
-        Runtime.getRuntime().gc();
+
+        System.gc();
+        System.runFinalization();
+        System.gc();
+
         // Note: classInstanceLimit is immutable, so this is lock-free
         for (Map.Entry<Class, Integer> entry : policy.classInstanceLimit.entrySet()) {
             Class klass = entry.getKey();
@@ -2005,7 +2009,10 @@ public final class StrictMode {
         // noticeably less responsive during orientation changes when activities are
         // being restarted.  Granted, it is only a problem when StrictMode is enabled
         // but it is annoying.
-        Runtime.getRuntime().gc();
+
+        System.gc();
+        System.runFinalization();
+        System.gc();
 
         long instances = VMDebug.countInstancesOfClass(klass, false);
         if (instances > limit) {