OSDN Git Service

Move explicit GC after we are done initalizing all classes.
authorMathieu Chartier <mathieuc@google.com>
Mon, 11 Aug 2014 20:52:12 +0000 (13:52 -0700)
committerMathieu Chartier <mathieuc@google.com>
Thu, 14 Aug 2014 16:43:54 +0000 (09:43 -0700)
Previously we had the GC happen for each dex file, this added a
few seconds of time on boot.oat creation.

Bug: 16853450

(cherry picked from commit 093ef212b7db4c17ed62df5cac0c1ac3a24e691d)

Change-Id: Ia469838eff1550c175c3465a478d8081023601bd

compiler/driver/compiler_driver.cc

index d14aea3..efc5bb7 100644 (file)
@@ -1852,10 +1852,6 @@ void CompilerDriver::InitializeClasses(jobject jni_class_loader, const DexFile&
     thread_count = thread_count_;
   }
   context.ForAll(0, dex_file.NumClassDefs(), InitializeClass, thread_count);
-  if (IsImage()) {
-    // Prune garbage objects created during aborted transactions.
-    Runtime::Current()->GetHeap()->CollectGarbage(true);
-  }
 }
 
 void CompilerDriver::InitializeClasses(jobject class_loader,
@@ -1866,6 +1862,10 @@ void CompilerDriver::InitializeClasses(jobject class_loader,
     CHECK(dex_file != NULL);
     InitializeClasses(class_loader, *dex_file, dex_files, thread_pool, timings);
   }
+  if (IsImage()) {
+    // Prune garbage objects created during aborted transactions.
+    Runtime::Current()->GetHeap()->CollectGarbage(true);
+  }
 }
 
 void CompilerDriver::Compile(jobject class_loader, const std::vector<const DexFile*>& dex_files,