diff options
Diffstat (limited to 'runtime/gc/heap.cc')
| -rw-r--r-- | runtime/gc/heap.cc | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc index b9d69d55c7..bceac4403d 100644 --- a/runtime/gc/heap.cc +++ b/runtime/gc/heap.cc @@ -24,6 +24,7 @@ #include <vector> #include "base/allocator.h" +#include "base/dumpable.h" #include "base/histogram-inl.h" #include "base/stl_util.h" #include "common_throws.h" @@ -436,7 +437,7 @@ Heap::Heap(size_t initial_size, size_t growth_limit, size_t min_free, size_t max MemMap* Heap::MapAnonymousPreferredAddress(const char* name, uint8_t* request_begin, size_t capacity, int prot_flags, std::string* out_error_str) { while (true) { - MemMap* map = MemMap::MapAnonymous(kMemMapSpaceName[0], request_begin, capacity, + MemMap* map = MemMap::MapAnonymous(name, request_begin, capacity, PROT_READ | PROT_WRITE, true, out_error_str); if (map != nullptr || request_begin == nullptr) { return map; @@ -2137,6 +2138,13 @@ collector::GcType Heap::CollectGarbageInternal(collector::GcType gc_type, GcCaus } else { LOG(FATAL) << "Invalid current allocator " << current_allocator_; } + if (IsGcConcurrent()) { + // Disable concurrent GC check so that we don't have spammy JNI requests. + // This gets recalculated in GrowForUtilization. It is important that it is disabled / + // calculated in the same thread so that there aren't any races that can cause it to become + // permanantly disabled. b/17942071 + concurrent_start_bytes_ = std::numeric_limits<size_t>::max(); + } CHECK(collector != nullptr) << "Could not find garbage collector with collector_type=" << static_cast<size_t>(collector_type_) << " and gc_type=" << gc_type; @@ -2178,7 +2186,7 @@ collector::GcType Heap::CollectGarbageInternal(collector::GcType gc_type, GcCaus << percent_free << "% free, " << PrettySize(current_heap_size) << "/" << PrettySize(total_memory) << ", " << "paused " << pause_string.str() << " total " << PrettyDuration((duration / 1000) * 1000); - VLOG(heap) << ConstDumpable<TimingLogger>(*current_gc_iteration_.GetTimings()); + VLOG(heap) << Dumpable<TimingLogger>(*current_gc_iteration_.GetTimings()); } FinishGC(self, gc_type); // Inform DDMS that a GC completed. @@ -2955,9 +2963,6 @@ void Heap::RequestConcurrentGC(Thread* self) { self->IsHandlingStackOverflow()) { return; } - // We already have a request pending, no reason to start more until we update - // concurrent_start_bytes_. - concurrent_start_bytes_ = std::numeric_limits<size_t>::max(); JNIEnv* env = self->GetJniEnv(); DCHECK(WellKnownClasses::java_lang_Daemons != nullptr); DCHECK(WellKnownClasses::java_lang_Daemons_requestGC != nullptr); |