From 10d6886c9ce3ed87431cf10d376a69c23950fa61 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Wed, 15 Apr 2015 14:21:33 -0700 Subject: [PATCH] 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 --- runtime/gc/collector/mark_sweep.cc | 6 +----- runtime/gc/heap.h | 2 ++ runtime/parsed_options.cc | 4 ++-- 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 bb8d876bc..e65d1f1ae 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 2f627985a..066b4c5b7 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 c23f7449f..8567b4459 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(sysconf(_SC_NPROCESSORS_CONF) - 1u)); + args.SetIfMissing(M::ParallelGCThreads, gc::Heap::kDefaultEnableParallelGC ? + static_cast(sysconf(_SC_NPROCESSORS_CONF) - 1u) : 0u); // -Xverbose: { diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def index 339f925f5..e420d5230 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) -- 2.11.0