OSDN Git Service

Disable parallel GC by default
authorMathieu Chartier <mathieuc@google.com>
Wed, 15 Apr 2015 21:21:33 +0000 (14:21 -0700)
committerMathieu Chartier <mathieuc@google.com>
Wed, 15 Apr 2015 21:42:50 +0000 (14:42 -0700)
Not using parallel GC seems to reduce avg pauses by ~0.1s on
EvaluateAndApplyChanges. Avoiding creating the thread pool should
help app launch slightly and reduce memory ussage.

Change-Id: Iebec2a17701c76e4145b41d7c0b4f6dd17806efa

runtime/gc/collector/mark_sweep.cc
runtime/gc/heap.h
runtime/parsed_options.cc
runtime/runtime_options.def

index bb8d876..e65d1f1 100644 (file)
@@ -740,11 +740,7 @@ size_t MarkSweep::GetThreadCount(bool paused) const {
   if (heap_->GetThreadPool() == nullptr || !heap_->CareAboutPauseTimes()) {
     return 1;
   }
-  if (paused) {
-    return heap_->GetParallelGCThreadCount() + 1;
-  } else {
-    return heap_->GetConcGCThreadCount() + 1;
-  }
+  return (paused ? heap_->GetParallelGCThreadCount() : heap_->GetConcGCThreadCount()) + 1;
 }
 
 void MarkSweep::ScanGrayObjects(bool paused, uint8_t minimum_age) {
index 2f62798..066b4c5 100644 (file)
@@ -145,6 +145,8 @@ class Heap {
   static constexpr double kDefaultHeapGrowthMultiplier = 2.0;
   // Primitive arrays larger than this size are put in the large object space.
   static constexpr size_t kDefaultLargeObjectThreshold = 3 * kPageSize;
+  // Whether or not parallel GC is enabled. If not, then we never create the thread pool.
+  static constexpr bool kDefaultEnableParallelGC = false;
 
   // Whether or not we use the free list large object space. Only use it if USE_ART_LOW_4G_ALLOCATOR
   // since this means that we have to use the slow msync loop in MemMap::MapAnonymous.
index c23f744..8567b44 100644 (file)
@@ -440,8 +440,8 @@ bool ParsedOptions::Parse(const RuntimeOptions& options, bool ignore_unrecognize
   }
 
   // Default to number of processors minus one since the main GC thread also does work.
-  args.SetIfMissing(M::ParallelGCThreads,
-                    static_cast<unsigned int>(sysconf(_SC_NPROCESSORS_CONF) - 1u));
+  args.SetIfMissing(M::ParallelGCThreads, gc::Heap::kDefaultEnableParallelGC ?
+      static_cast<unsigned int>(sysconf(_SC_NPROCESSORS_CONF) - 1u) : 0u);
 
   // -Xverbose:
   {
index 339f925..e420d52 100644 (file)
@@ -50,7 +50,7 @@ RUNTIME_OPTIONS_KEY (MemoryKiB,           HeapMaxFree,                    gc::He
 RUNTIME_OPTIONS_KEY (MemoryKiB,           NonMovingSpaceCapacity,         gc::Heap::kDefaultNonMovingSpaceCapacity)
 RUNTIME_OPTIONS_KEY (double,              HeapTargetUtilization,          gc::Heap::kDefaultTargetUtilization)
 RUNTIME_OPTIONS_KEY (double,              ForegroundHeapGrowthMultiplier, gc::Heap::kDefaultHeapGrowthMultiplier)
-RUNTIME_OPTIONS_KEY (unsigned int,        ParallelGCThreads,              1u)
+RUNTIME_OPTIONS_KEY (unsigned int,        ParallelGCThreads,              0u)
 RUNTIME_OPTIONS_KEY (unsigned int,        ConcGCThreads)
 RUNTIME_OPTIONS_KEY (Memory<1>,           StackSize)  // -Xss
 RUNTIME_OPTIONS_KEY (unsigned int,        MaxSpinsBeforeThinLockInflation,Monitor::kDefaultMaxSpinsBeforeThinLockInflation)