diff options
author | Mathieu Chartier <mathieuc@google.com> | 2015-04-15 14:21:33 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2015-04-15 14:42:50 -0700 |
commit | 10d6886c9ce3ed87431cf10d376a69c23950fa61 (patch) | |
tree | 52cfc18e941d78e480c5fdacda57721083b5e51f | |
parent | a76a08fed88bd081bcc4d240f1ba3472a2acbbab (diff) | |
download | android_art-10d6886c9ce3ed87431cf10d376a69c23950fa61.tar.gz android_art-10d6886c9ce3ed87431cf10d376a69c23950fa61.tar.bz2 android_art-10d6886c9ce3ed87431cf10d376a69c23950fa61.zip |
Disable parallel GC by default
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
-rw-r--r-- | runtime/gc/collector/mark_sweep.cc | 6 | ||||
-rw-r--r-- | runtime/gc/heap.h | 2 | ||||
-rw-r--r-- | runtime/parsed_options.cc | 4 | ||||
-rw-r--r-- | runtime/runtime_options.def | 2 |
4 files changed, 6 insertions, 8 deletions
diff --git a/runtime/gc/collector/mark_sweep.cc b/runtime/gc/collector/mark_sweep.cc index bb8d876bcb..e65d1f1ae2 100644 --- a/runtime/gc/collector/mark_sweep.cc +++ b/runtime/gc/collector/mark_sweep.cc @@ -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) { diff --git a/runtime/gc/heap.h b/runtime/gc/heap.h index 2f627985a1..066b4c5b77 100644 --- a/runtime/gc/heap.h +++ b/runtime/gc/heap.h @@ -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. diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc index c23f7449fe..8567b44593 100644 --- a/runtime/parsed_options.cc +++ b/runtime/parsed_options.cc @@ -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: { diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def index 339f925f55..e420d52303 100644 --- a/runtime/runtime_options.def +++ b/runtime/runtime_options.def @@ -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) |