heap.cc revision f5b0e20b5b31f5f5465784adcf2a204dcd69c7fd
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "heap.h"
18
19#define ATRACE_TAG ATRACE_TAG_DALVIK
20#include <cutils/trace.h>
21
22#include <limits>
23#include <vector>
24#include <valgrind.h>
25
26#include "base/histogram-inl.h"
27#include "base/stl_util.h"
28#include "common_throws.h"
29#include "cutils/sched_policy.h"
30#include "debugger.h"
31#include "gc/accounting/atomic_stack.h"
32#include "gc/accounting/card_table-inl.h"
33#include "gc/accounting/heap_bitmap-inl.h"
34#include "gc/accounting/mod_union_table.h"
35#include "gc/accounting/mod_union_table-inl.h"
36#include "gc/accounting/space_bitmap-inl.h"
37#include "gc/collector/mark_sweep-inl.h"
38#include "gc/collector/partial_mark_sweep.h"
39#include "gc/collector/semi_space.h"
40#include "gc/collector/sticky_mark_sweep.h"
41#include "gc/space/bump_pointer_space.h"
42#include "gc/space/dlmalloc_space-inl.h"
43#include "gc/space/image_space.h"
44#include "gc/space/large_object_space.h"
45#include "gc/space/rosalloc_space-inl.h"
46#include "gc/space/space-inl.h"
47#include "gc/space/zygote_space.h"
48#include "heap-inl.h"
49#include "image.h"
50#include "invoke_arg_array_builder.h"
51#include "mirror/art_field-inl.h"
52#include "mirror/class-inl.h"
53#include "mirror/object.h"
54#include "mirror/object-inl.h"
55#include "mirror/object_array-inl.h"
56#include "object_utils.h"
57#include "os.h"
58#include "runtime.h"
59#include "ScopedLocalRef.h"
60#include "scoped_thread_state_change.h"
61#include "sirt_ref.h"
62#include "thread_list.h"
63#include "UniquePtr.h"
64#include "well_known_classes.h"
65
66namespace art {
67
68extern void SetQuickAllocEntryPointsAllocator(gc::AllocatorType allocator);
69
70namespace gc {
71
72static constexpr bool kGCALotMode = false;
73static constexpr size_t kGcAlotInterval = KB;
74// Minimum amount of remaining bytes before a concurrent GC is triggered.
75static constexpr size_t kMinConcurrentRemainingBytes = 128 * KB;
76static constexpr size_t kMaxConcurrentRemainingBytes = 512 * KB;
77
78Heap::Heap(size_t initial_size, size_t growth_limit, size_t min_free, size_t max_free,
79           double target_utilization, size_t capacity, const std::string& image_file_name,
80           CollectorType post_zygote_collector_type, CollectorType background_collector_type,
81           size_t parallel_gc_threads, size_t conc_gc_threads, bool low_memory_mode,
82           size_t long_pause_log_threshold, size_t long_gc_log_threshold,
83           bool ignore_max_footprint, bool use_tlab, bool verify_pre_gc_heap,
84           bool verify_post_gc_heap, bool verify_pre_gc_rosalloc,
85           bool verify_post_gc_rosalloc)
86    : non_moving_space_(nullptr),
87      rosalloc_space_(nullptr),
88      dlmalloc_space_(nullptr),
89      main_space_(nullptr),
90      concurrent_gc_(false),
91      collector_type_(kCollectorTypeNone),
92      post_zygote_collector_type_(post_zygote_collector_type),
93      background_collector_type_(background_collector_type),
94      parallel_gc_threads_(parallel_gc_threads),
95      conc_gc_threads_(conc_gc_threads),
96      low_memory_mode_(low_memory_mode),
97      long_pause_log_threshold_(long_pause_log_threshold),
98      long_gc_log_threshold_(long_gc_log_threshold),
99      ignore_max_footprint_(ignore_max_footprint),
100      have_zygote_space_(false),
101      soft_reference_queue_(this),
102      weak_reference_queue_(this),
103      finalizer_reference_queue_(this),
104      phantom_reference_queue_(this),
105      cleared_references_(this),
106      collector_type_running_(kCollectorTypeNone),
107      last_gc_type_(collector::kGcTypeNone),
108      next_gc_type_(collector::kGcTypePartial),
109      capacity_(capacity),
110      growth_limit_(growth_limit),
111      max_allowed_footprint_(initial_size),
112      native_footprint_gc_watermark_(initial_size),
113      native_footprint_limit_(2 * initial_size),
114      native_need_to_run_finalization_(false),
115      // Initially assume we perceive jank in case the process state is never updated.
116      process_state_(kProcessStateJankPerceptible),
117      concurrent_start_bytes_(std::numeric_limits<size_t>::max()),
118      total_bytes_freed_ever_(0),
119      total_objects_freed_ever_(0),
120      num_bytes_allocated_(0),
121      native_bytes_allocated_(0),
122      gc_memory_overhead_(0),
123      verify_missing_card_marks_(false),
124      verify_system_weaks_(false),
125      verify_pre_gc_heap_(verify_pre_gc_heap),
126      verify_post_gc_heap_(verify_post_gc_heap),
127      verify_mod_union_table_(false),
128      verify_pre_gc_rosalloc_(verify_pre_gc_rosalloc),
129      verify_post_gc_rosalloc_(verify_post_gc_rosalloc),
130      last_trim_time_ms_(0),
131      allocation_rate_(0),
132      /* For GC a lot mode, we limit the allocations stacks to be kGcAlotInterval allocations. This
133       * causes a lot of GC since we do a GC for alloc whenever the stack is full. When heap
134       * verification is enabled, we limit the size of allocation stacks to speed up their
135       * searching.
136       */
137      max_allocation_stack_size_(kGCALotMode ? kGcAlotInterval
138          : (kDesiredHeapVerification > kVerifyAllFast) ? KB : MB),
139      current_allocator_(kAllocatorTypeDlMalloc),
140      current_non_moving_allocator_(kAllocatorTypeNonMoving),
141      bump_pointer_space_(nullptr),
142      temp_space_(nullptr),
143      reference_referent_offset_(0),
144      reference_queue_offset_(0),
145      reference_queueNext_offset_(0),
146      reference_pendingNext_offset_(0),
147      finalizer_reference_zombie_offset_(0),
148      min_free_(min_free),
149      max_free_(max_free),
150      target_utilization_(target_utilization),
151      total_wait_time_(0),
152      total_allocation_time_(0),
153      verify_object_mode_(kHeapVerificationNotPermitted),
154      disable_moving_gc_count_(0),
155      running_on_valgrind_(RUNNING_ON_VALGRIND),
156      use_tlab_(use_tlab) {
157  if (VLOG_IS_ON(heap) || VLOG_IS_ON(startup)) {
158    LOG(INFO) << "Heap() entering";
159  }
160  // If we aren't the zygote, switch to the default non zygote allocator. This may update the
161  // entrypoints.
162  if (!Runtime::Current()->IsZygote() || !kMovingCollector) {
163    ChangeCollector(post_zygote_collector_type_);
164  } else {
165    // We are the zygote, use bump pointer allocation + semi space collector.
166    ChangeCollector(kCollectorTypeSS);
167  }
168
169  live_bitmap_.reset(new accounting::HeapBitmap(this));
170  mark_bitmap_.reset(new accounting::HeapBitmap(this));
171  // Requested begin for the alloc space, to follow the mapped image and oat files
172  byte* requested_alloc_space_begin = nullptr;
173  if (!image_file_name.empty()) {
174    space::ImageSpace* image_space = space::ImageSpace::Create(image_file_name.c_str());
175    CHECK(image_space != nullptr) << "Failed to create space for " << image_file_name;
176    AddSpace(image_space);
177    // Oat files referenced by image files immediately follow them in memory, ensure alloc space
178    // isn't going to get in the middle
179    byte* oat_file_end_addr = image_space->GetImageHeader().GetOatFileEnd();
180    CHECK_GT(oat_file_end_addr, image_space->End());
181    if (oat_file_end_addr > requested_alloc_space_begin) {
182      requested_alloc_space_begin = AlignUp(oat_file_end_addr, kPageSize);
183    }
184  }
185  const char* name = Runtime::Current()->IsZygote() ? "zygote space" : "alloc space";
186  space::MallocSpace* malloc_space;
187  if (kUseRosAlloc) {
188    malloc_space = space::RosAllocSpace::Create(name, initial_size, growth_limit, capacity,
189                                                requested_alloc_space_begin, low_memory_mode_);
190    CHECK(malloc_space != nullptr) << "Failed to create rosalloc space";
191  } else {
192    malloc_space = space::DlMallocSpace::Create(name, initial_size, growth_limit, capacity,
193                                                requested_alloc_space_begin);
194    CHECK(malloc_space != nullptr) << "Failed to create dlmalloc space";
195  }
196  VLOG(heap) << "malloc_space : " << malloc_space;
197  if (kMovingCollector) {
198    // TODO: Place bump-pointer spaces somewhere to minimize size of card table.
199    // TODO: Having 3+ spaces as big as the large heap size can cause virtual memory fragmentation
200    // issues.
201    const size_t bump_pointer_space_size = std::min(malloc_space->Capacity(), 128 * MB);
202    bump_pointer_space_ = space::BumpPointerSpace::Create("Bump pointer space",
203                                                          bump_pointer_space_size, nullptr);
204    CHECK(bump_pointer_space_ != nullptr) << "Failed to create bump pointer space";
205    AddSpace(bump_pointer_space_);
206    temp_space_ = space::BumpPointerSpace::Create("Bump pointer space 2", bump_pointer_space_size,
207                                                  nullptr);
208    CHECK(temp_space_ != nullptr) << "Failed to create bump pointer space";
209    AddSpace(temp_space_);
210    VLOG(heap) << "bump_pointer_space : " << bump_pointer_space_;
211    VLOG(heap) << "temp_space : " << temp_space_;
212  }
213  non_moving_space_ = malloc_space;
214  malloc_space->SetFootprintLimit(malloc_space->Capacity());
215  AddSpace(malloc_space);
216
217  // Allocate the large object space.
218  constexpr bool kUseFreeListSpaceForLOS = false;
219  if (kUseFreeListSpaceForLOS) {
220    large_object_space_ = space::FreeListSpace::Create("large object space", nullptr, capacity);
221  } else {
222    large_object_space_ = space::LargeObjectMapSpace::Create("large object space");
223  }
224  CHECK(large_object_space_ != nullptr) << "Failed to create large object space";
225  AddSpace(large_object_space_);
226
227  // Compute heap capacity. Continuous spaces are sorted in order of Begin().
228  CHECK(!continuous_spaces_.empty());
229
230  // Relies on the spaces being sorted.
231  byte* heap_begin = continuous_spaces_.front()->Begin();
232  byte* heap_end = continuous_spaces_.back()->Limit();
233  if (Runtime::Current()->IsZygote()) {
234    std::string error_str;
235    post_zygote_non_moving_space_mem_map_.reset(
236        MemMap::MapAnonymous("post zygote non-moving space", nullptr, 64 * MB,
237                             PROT_READ | PROT_WRITE, true, &error_str));
238    CHECK(post_zygote_non_moving_space_mem_map_.get() != nullptr) << error_str;
239    heap_begin = std::min(post_zygote_non_moving_space_mem_map_->Begin(), heap_begin);
240    heap_end = std::max(post_zygote_non_moving_space_mem_map_->End(), heap_end);
241  }
242  size_t heap_capacity = heap_end - heap_begin;
243
244  // Allocate the card table.
245  card_table_.reset(accounting::CardTable::Create(heap_begin, heap_capacity));
246  CHECK(card_table_.get() != NULL) << "Failed to create card table";
247
248  // Card cache for now since it makes it easier for us to update the references to the copying
249  // spaces.
250  accounting::ModUnionTable* mod_union_table =
251      new accounting::ModUnionTableCardCache("Image mod-union table", this, GetImageSpace());
252  CHECK(mod_union_table != nullptr) << "Failed to create image mod-union table";
253  AddModUnionTable(mod_union_table);
254
255  // TODO: Count objects in the image space here.
256  num_bytes_allocated_ = 0;
257
258  // Default mark stack size in bytes.
259  static const size_t default_mark_stack_size = 64 * KB;
260  mark_stack_.reset(accounting::ObjectStack::Create("mark stack", default_mark_stack_size));
261  allocation_stack_.reset(accounting::ObjectStack::Create("allocation stack",
262                                                          max_allocation_stack_size_));
263  live_stack_.reset(accounting::ObjectStack::Create("live stack",
264                                                    max_allocation_stack_size_));
265
266  // It's still too early to take a lock because there are no threads yet, but we can create locks
267  // now. We don't create it earlier to make it clear that you can't use locks during heap
268  // initialization.
269  gc_complete_lock_ = new Mutex("GC complete lock");
270  gc_complete_cond_.reset(new ConditionVariable("GC complete condition variable",
271                                                *gc_complete_lock_));
272  last_gc_time_ns_ = NanoTime();
273  last_gc_size_ = GetBytesAllocated();
274
275  if (ignore_max_footprint_) {
276    SetIdealFootprint(std::numeric_limits<size_t>::max());
277    concurrent_start_bytes_ = std::numeric_limits<size_t>::max();
278  }
279  CHECK_NE(max_allowed_footprint_, 0U);
280
281  // Create our garbage collectors.
282  for (size_t i = 0; i < 2; ++i) {
283    const bool concurrent = i != 0;
284    garbage_collectors_.push_back(new collector::MarkSweep(this, concurrent));
285    garbage_collectors_.push_back(new collector::PartialMarkSweep(this, concurrent));
286    garbage_collectors_.push_back(new collector::StickyMarkSweep(this, concurrent));
287  }
288  if (kMovingCollector) {
289    // TODO: Clean this up.
290    bool generational = post_zygote_collector_type_ == kCollectorTypeGSS;
291    semi_space_collector_ = new collector::SemiSpace(this, generational);
292    garbage_collectors_.push_back(semi_space_collector_);
293  }
294
295  if (running_on_valgrind_) {
296    Runtime::Current()->GetInstrumentation()->InstrumentQuickAllocEntryPoints();
297  }
298
299  if (VLOG_IS_ON(heap) || VLOG_IS_ON(startup)) {
300    LOG(INFO) << "Heap() exiting";
301  }
302}
303
304void Heap::ChangeAllocator(AllocatorType allocator) {
305  // These two allocators are only used internally and don't have any entrypoints.
306  DCHECK_NE(allocator, kAllocatorTypeLOS);
307  DCHECK_NE(allocator, kAllocatorTypeNonMoving);
308  if (current_allocator_ != allocator) {
309    current_allocator_ = allocator;
310    SetQuickAllocEntryPointsAllocator(current_allocator_);
311    Runtime::Current()->GetInstrumentation()->ResetQuickAllocEntryPoints();
312  }
313}
314
315bool Heap::IsCompilingBoot() const {
316  for (const auto& space : continuous_spaces_) {
317    if (space->IsImageSpace()) {
318      return false;
319    } else if (space->IsZygoteSpace()) {
320      return false;
321    }
322  }
323  return true;
324}
325
326bool Heap::HasImageSpace() const {
327  for (const auto& space : continuous_spaces_) {
328    if (space->IsImageSpace()) {
329      return true;
330    }
331  }
332  return false;
333}
334
335void Heap::IncrementDisableMovingGC(Thread* self) {
336  // Need to do this holding the lock to prevent races where the GC is about to run / running when
337  // we attempt to disable it.
338  ScopedThreadStateChange tsc(self, kWaitingForGcToComplete);
339  MutexLock mu(self, *gc_complete_lock_);
340  ++disable_moving_gc_count_;
341  if (IsCompactingGC(collector_type_running_)) {
342    WaitForGcToCompleteLocked(self);
343  }
344}
345
346void Heap::DecrementDisableMovingGC(Thread* self) {
347  MutexLock mu(self, *gc_complete_lock_);
348  CHECK_GE(disable_moving_gc_count_, 0U);
349  --disable_moving_gc_count_;
350}
351
352void Heap::UpdateProcessState(ProcessState process_state) {
353  if (process_state_ != process_state) {
354    process_state_ = process_state;
355    if (process_state_ == kProcessStateJankPerceptible) {
356      TransitionCollector(post_zygote_collector_type_);
357    } else {
358      TransitionCollector(background_collector_type_);
359    }
360  } else {
361    CollectGarbageInternal(collector::kGcTypeFull, kGcCauseBackground, false);
362  }
363}
364
365void Heap::CreateThreadPool() {
366  const size_t num_threads = std::max(parallel_gc_threads_, conc_gc_threads_);
367  if (num_threads != 0) {
368    thread_pool_.reset(new ThreadPool("Heap thread pool", num_threads));
369  }
370}
371
372void Heap::VisitObjects(ObjectCallback callback, void* arg) {
373  Thread* self = Thread::Current();
374  // GCs can move objects, so don't allow this.
375  const char* old_cause = self->StartAssertNoThreadSuspension("Visiting objects");
376  if (bump_pointer_space_ != nullptr) {
377    // Visit objects in bump pointer space.
378    bump_pointer_space_->Walk(callback, arg);
379  }
380  // TODO: Switch to standard begin and end to use ranged a based loop.
381  for (mirror::Object** it = allocation_stack_->Begin(), **end = allocation_stack_->End();
382      it < end; ++it) {
383    mirror::Object* obj = *it;
384    if (obj != nullptr && obj->GetClass() != nullptr) {
385      // Avoid the race condition caused by the object not yet being written into the allocation
386      // stack or the class not yet being written in the object. Or, if kUseThreadLocalAllocationStack,
387      // there can be nulls on the allocation stack.
388      callback(obj, arg);
389    }
390  }
391  GetLiveBitmap()->Walk(callback, arg);
392  self->EndAssertNoThreadSuspension(old_cause);
393}
394
395void Heap::MarkAllocStackAsLive(accounting::ObjectStack* stack) {
396  space::ContinuousSpace* space1 = rosalloc_space_ != nullptr ? rosalloc_space_ : non_moving_space_;
397  space::ContinuousSpace* space2 = dlmalloc_space_ != nullptr ? dlmalloc_space_ : non_moving_space_;
398  // This is just logic to handle a case of either not having a rosalloc or dlmalloc space.
399  // TODO: Generalize this to n bitmaps?
400  if (space1 == nullptr) {
401    DCHECK(space2 != nullptr);
402    space1 = space2;
403  }
404  if (space2 == nullptr) {
405    DCHECK(space1 != nullptr);
406    space2 = space1;
407  }
408  MarkAllocStack(space1->GetLiveBitmap(), space2->GetLiveBitmap(),
409                 large_object_space_->GetLiveObjects(), stack);
410}
411
412void Heap::DeleteThreadPool() {
413  thread_pool_.reset(nullptr);
414}
415
416void Heap::AddSpace(space::Space* space, bool set_as_default) {
417  DCHECK(space != nullptr);
418  WriterMutexLock mu(Thread::Current(), *Locks::heap_bitmap_lock_);
419  if (space->IsContinuousSpace()) {
420    DCHECK(!space->IsDiscontinuousSpace());
421    space::ContinuousSpace* continuous_space = space->AsContinuousSpace();
422    // Continuous spaces don't necessarily have bitmaps.
423    accounting::SpaceBitmap* live_bitmap = continuous_space->GetLiveBitmap();
424    accounting::SpaceBitmap* mark_bitmap = continuous_space->GetMarkBitmap();
425    if (live_bitmap != nullptr) {
426      DCHECK(mark_bitmap != nullptr);
427      live_bitmap_->AddContinuousSpaceBitmap(live_bitmap);
428      mark_bitmap_->AddContinuousSpaceBitmap(mark_bitmap);
429    }
430    continuous_spaces_.push_back(continuous_space);
431    if (set_as_default) {
432      if (continuous_space->IsDlMallocSpace()) {
433        dlmalloc_space_ = continuous_space->AsDlMallocSpace();
434      } else if (continuous_space->IsRosAllocSpace()) {
435        rosalloc_space_ = continuous_space->AsRosAllocSpace();
436      }
437    }
438    // Ensure that spaces remain sorted in increasing order of start address.
439    std::sort(continuous_spaces_.begin(), continuous_spaces_.end(),
440              [](const space::ContinuousSpace* a, const space::ContinuousSpace* b) {
441      return a->Begin() < b->Begin();
442    });
443  } else {
444    DCHECK(space->IsDiscontinuousSpace());
445    space::DiscontinuousSpace* discontinuous_space = space->AsDiscontinuousSpace();
446    DCHECK(discontinuous_space->GetLiveObjects() != nullptr);
447    live_bitmap_->AddDiscontinuousObjectSet(discontinuous_space->GetLiveObjects());
448    DCHECK(discontinuous_space->GetMarkObjects() != nullptr);
449    mark_bitmap_->AddDiscontinuousObjectSet(discontinuous_space->GetMarkObjects());
450    discontinuous_spaces_.push_back(discontinuous_space);
451  }
452  if (space->IsAllocSpace()) {
453    alloc_spaces_.push_back(space->AsAllocSpace());
454  }
455}
456
457void Heap::RemoveSpace(space::Space* space) {
458  DCHECK(space != nullptr);
459  WriterMutexLock mu(Thread::Current(), *Locks::heap_bitmap_lock_);
460  if (space->IsContinuousSpace()) {
461    DCHECK(!space->IsDiscontinuousSpace());
462    space::ContinuousSpace* continuous_space = space->AsContinuousSpace();
463    // Continuous spaces don't necessarily have bitmaps.
464    accounting::SpaceBitmap* live_bitmap = continuous_space->GetLiveBitmap();
465    accounting::SpaceBitmap* mark_bitmap = continuous_space->GetMarkBitmap();
466    if (live_bitmap != nullptr) {
467      DCHECK(mark_bitmap != nullptr);
468      live_bitmap_->RemoveContinuousSpaceBitmap(live_bitmap);
469      mark_bitmap_->RemoveContinuousSpaceBitmap(mark_bitmap);
470    }
471    auto it = std::find(continuous_spaces_.begin(), continuous_spaces_.end(), continuous_space);
472    DCHECK(it != continuous_spaces_.end());
473    continuous_spaces_.erase(it);
474    if (continuous_space == dlmalloc_space_) {
475      dlmalloc_space_ = nullptr;
476    } else if (continuous_space == rosalloc_space_) {
477      rosalloc_space_ = nullptr;
478    }
479    if (continuous_space == main_space_) {
480      main_space_ = nullptr;
481    }
482  } else {
483    DCHECK(space->IsDiscontinuousSpace());
484    space::DiscontinuousSpace* discontinuous_space = space->AsDiscontinuousSpace();
485    DCHECK(discontinuous_space->GetLiveObjects() != nullptr);
486    live_bitmap_->RemoveDiscontinuousObjectSet(discontinuous_space->GetLiveObjects());
487    DCHECK(discontinuous_space->GetMarkObjects() != nullptr);
488    mark_bitmap_->RemoveDiscontinuousObjectSet(discontinuous_space->GetMarkObjects());
489    auto it = std::find(discontinuous_spaces_.begin(), discontinuous_spaces_.end(),
490                        discontinuous_space);
491    DCHECK(it != discontinuous_spaces_.end());
492    discontinuous_spaces_.erase(it);
493  }
494  if (space->IsAllocSpace()) {
495    auto it = std::find(alloc_spaces_.begin(), alloc_spaces_.end(), space->AsAllocSpace());
496    DCHECK(it != alloc_spaces_.end());
497    alloc_spaces_.erase(it);
498  }
499}
500
501void Heap::RegisterGCAllocation(size_t bytes) {
502  if (this != nullptr) {
503    gc_memory_overhead_.FetchAndAdd(bytes);
504  }
505}
506
507void Heap::RegisterGCDeAllocation(size_t bytes) {
508  if (this != nullptr) {
509    gc_memory_overhead_.FetchAndSub(bytes);
510  }
511}
512
513void Heap::DumpGcPerformanceInfo(std::ostream& os) {
514  // Dump cumulative timings.
515  os << "Dumping cumulative Gc timings\n";
516  uint64_t total_duration = 0;
517
518  // Dump cumulative loggers for each GC type.
519  uint64_t total_paused_time = 0;
520  for (const auto& collector : garbage_collectors_) {
521    CumulativeLogger& logger = collector->GetCumulativeTimings();
522    if (logger.GetTotalNs() != 0) {
523      os << Dumpable<CumulativeLogger>(logger);
524      const uint64_t total_ns = logger.GetTotalNs();
525      const uint64_t total_pause_ns = collector->GetTotalPausedTimeNs();
526      double seconds = NsToMs(logger.GetTotalNs()) / 1000.0;
527      const uint64_t freed_bytes = collector->GetTotalFreedBytes();
528      const uint64_t freed_objects = collector->GetTotalFreedObjects();
529      Histogram<uint64_t>::CumulativeData cumulative_data;
530      collector->GetPauseHistogram().CreateHistogram(&cumulative_data);
531      collector->GetPauseHistogram().PrintConfidenceIntervals(os, 0.99, cumulative_data);
532      os << collector->GetName() << " total time: " << PrettyDuration(total_ns) << "\n"
533         << collector->GetName() << " freed: " << freed_objects
534         << " objects with total size " << PrettySize(freed_bytes) << "\n"
535         << collector->GetName() << " throughput: " << freed_objects / seconds << "/s / "
536         << PrettySize(freed_bytes / seconds) << "/s\n";
537      total_duration += total_ns;
538      total_paused_time += total_pause_ns;
539    }
540  }
541  uint64_t allocation_time = static_cast<uint64_t>(total_allocation_time_) * kTimeAdjust;
542  if (total_duration != 0) {
543    const double total_seconds = static_cast<double>(total_duration / 1000) / 1000000.0;
544    os << "Total time spent in GC: " << PrettyDuration(total_duration) << "\n";
545    os << "Mean GC size throughput: "
546       << PrettySize(GetBytesFreedEver() / total_seconds) << "/s\n";
547    os << "Mean GC object throughput: "
548       << (GetObjectsFreedEver() / total_seconds) << " objects/s\n";
549  }
550  size_t total_objects_allocated = GetObjectsAllocatedEver();
551  os << "Total number of allocations: " << total_objects_allocated << "\n";
552  size_t total_bytes_allocated = GetBytesAllocatedEver();
553  os << "Total bytes allocated " << PrettySize(total_bytes_allocated) << "\n";
554  if (kMeasureAllocationTime) {
555    os << "Total time spent allocating: " << PrettyDuration(allocation_time) << "\n";
556    os << "Mean allocation time: " << PrettyDuration(allocation_time / total_objects_allocated)
557       << "\n";
558  }
559  os << "Total mutator paused time: " << PrettyDuration(total_paused_time) << "\n";
560  os << "Total time waiting for GC to complete: " << PrettyDuration(total_wait_time_) << "\n";
561  os << "Approximate GC data structures memory overhead: " << gc_memory_overhead_;
562}
563
564Heap::~Heap() {
565  VLOG(heap) << "Starting ~Heap()";
566  STLDeleteElements(&garbage_collectors_);
567  // If we don't reset then the mark stack complains in its destructor.
568  allocation_stack_->Reset();
569  live_stack_->Reset();
570  STLDeleteValues(&mod_union_tables_);
571  STLDeleteElements(&continuous_spaces_);
572  STLDeleteElements(&discontinuous_spaces_);
573  delete gc_complete_lock_;
574  VLOG(heap) << "Finished ~Heap()";
575}
576
577space::ContinuousSpace* Heap::FindContinuousSpaceFromObject(const mirror::Object* obj,
578                                                            bool fail_ok) const {
579  for (const auto& space : continuous_spaces_) {
580    if (space->Contains(obj)) {
581      return space;
582    }
583  }
584  if (!fail_ok) {
585    LOG(FATAL) << "object " << reinterpret_cast<const void*>(obj) << " not inside any spaces!";
586  }
587  return NULL;
588}
589
590space::DiscontinuousSpace* Heap::FindDiscontinuousSpaceFromObject(const mirror::Object* obj,
591                                                                  bool fail_ok) const {
592  for (const auto& space : discontinuous_spaces_) {
593    if (space->Contains(obj)) {
594      return space;
595    }
596  }
597  if (!fail_ok) {
598    LOG(FATAL) << "object " << reinterpret_cast<const void*>(obj) << " not inside any spaces!";
599  }
600  return NULL;
601}
602
603space::Space* Heap::FindSpaceFromObject(const mirror::Object* obj, bool fail_ok) const {
604  space::Space* result = FindContinuousSpaceFromObject(obj, true);
605  if (result != NULL) {
606    return result;
607  }
608  return FindDiscontinuousSpaceFromObject(obj, true);
609}
610
611struct SoftReferenceArgs {
612  IsMarkedCallback* is_marked_callback_;
613  MarkObjectCallback* recursive_mark_callback_;
614  void* arg_;
615};
616
617mirror::Object* Heap::PreserveSoftReferenceCallback(mirror::Object* obj, void* arg) {
618  SoftReferenceArgs* args = reinterpret_cast<SoftReferenceArgs*>(arg);
619  // TODO: Not preserve all soft references.
620  return args->recursive_mark_callback_(obj, args->arg_);
621}
622
623// Process reference class instances and schedule finalizations.
624void Heap::ProcessReferences(TimingLogger& timings, bool clear_soft,
625                             IsMarkedCallback* is_marked_callback,
626                             MarkObjectCallback* recursive_mark_object_callback, void* arg) {
627  // Unless we are in the zygote or required to clear soft references with white references,
628  // preserve some white referents.
629  if (!clear_soft && !Runtime::Current()->IsZygote()) {
630    SoftReferenceArgs soft_reference_args;
631    soft_reference_args.is_marked_callback_ = is_marked_callback;
632    soft_reference_args.recursive_mark_callback_ = recursive_mark_object_callback;
633    soft_reference_args.arg_ = arg;
634    soft_reference_queue_.PreserveSomeSoftReferences(&PreserveSoftReferenceCallback,
635                                                     &soft_reference_args);
636  }
637  timings.StartSplit("ProcessReferences");
638  // Clear all remaining soft and weak references with white referents.
639  soft_reference_queue_.ClearWhiteReferences(cleared_references_, is_marked_callback, arg);
640  weak_reference_queue_.ClearWhiteReferences(cleared_references_, is_marked_callback, arg);
641  timings.EndSplit();
642  // Preserve all white objects with finalize methods and schedule them for finalization.
643  timings.StartSplit("EnqueueFinalizerReferences");
644  finalizer_reference_queue_.EnqueueFinalizerReferences(cleared_references_, is_marked_callback,
645                                                        recursive_mark_object_callback, arg);
646  timings.EndSplit();
647  timings.StartSplit("ProcessReferences");
648  // Clear all f-reachable soft and weak references with white referents.
649  soft_reference_queue_.ClearWhiteReferences(cleared_references_, is_marked_callback, arg);
650  weak_reference_queue_.ClearWhiteReferences(cleared_references_, is_marked_callback, arg);
651  // Clear all phantom references with white referents.
652  phantom_reference_queue_.ClearWhiteReferences(cleared_references_, is_marked_callback, arg);
653  // At this point all reference queues other than the cleared references should be empty.
654  DCHECK(soft_reference_queue_.IsEmpty());
655  DCHECK(weak_reference_queue_.IsEmpty());
656  DCHECK(finalizer_reference_queue_.IsEmpty());
657  DCHECK(phantom_reference_queue_.IsEmpty());
658  timings.EndSplit();
659}
660
661bool Heap::IsEnqueued(mirror::Object* ref) const {
662  // Since the references are stored as cyclic lists it means that once enqueued, the pending next
663  // will always be non-null.
664  return ref->GetFieldObject<mirror::Object>(GetReferencePendingNextOffset(), false) != nullptr;
665}
666
667bool Heap::IsEnqueuable(mirror::Object* ref) const {
668  DCHECK(ref != nullptr);
669  const mirror::Object* queue =
670      ref->GetFieldObject<mirror::Object>(GetReferenceQueueOffset(), false);
671  const mirror::Object* queue_next =
672      ref->GetFieldObject<mirror::Object>(GetReferenceQueueNextOffset(), false);
673  return queue != nullptr && queue_next == nullptr;
674}
675
676// Process the "referent" field in a java.lang.ref.Reference.  If the referent has not yet been
677// marked, put it on the appropriate list in the heap for later processing.
678void Heap::DelayReferenceReferent(mirror::Class* klass, mirror::Object* obj,
679                                  IsMarkedCallback is_marked_callback, void* arg) {
680  DCHECK(klass != nullptr);
681  DCHECK(klass->IsReferenceClass());
682  DCHECK(obj != nullptr);
683  mirror::Object* referent = GetReferenceReferent(obj);
684  if (referent != nullptr) {
685    mirror::Object* forward_address = is_marked_callback(referent, arg);
686    // Null means that the object is not currently marked.
687    if (forward_address == nullptr) {
688      Thread* self = Thread::Current();
689      // TODO: Remove these locks, and use atomic stacks for storing references?
690      // We need to check that the references haven't already been enqueued since we can end up
691      // scanning the same reference multiple times due to dirty cards.
692      if (klass->IsSoftReferenceClass()) {
693        soft_reference_queue_.AtomicEnqueueIfNotEnqueued(self, obj);
694      } else if (klass->IsWeakReferenceClass()) {
695        weak_reference_queue_.AtomicEnqueueIfNotEnqueued(self, obj);
696      } else if (klass->IsFinalizerReferenceClass()) {
697        finalizer_reference_queue_.AtomicEnqueueIfNotEnqueued(self, obj);
698      } else if (klass->IsPhantomReferenceClass()) {
699        phantom_reference_queue_.AtomicEnqueueIfNotEnqueued(self, obj);
700      } else {
701        LOG(FATAL) << "Invalid reference type " << PrettyClass(klass) << " " << std::hex
702                   << klass->GetAccessFlags();
703      }
704    } else if (referent != forward_address) {
705      // Referent is already marked and we need to update it.
706      SetReferenceReferent(obj, forward_address);
707    }
708  }
709}
710
711space::ImageSpace* Heap::GetImageSpace() const {
712  for (const auto& space : continuous_spaces_) {
713    if (space->IsImageSpace()) {
714      return space->AsImageSpace();
715    }
716  }
717  return NULL;
718}
719
720static void MSpaceChunkCallback(void* start, void* end, size_t used_bytes, void* arg) {
721  size_t chunk_size = reinterpret_cast<uint8_t*>(end) - reinterpret_cast<uint8_t*>(start);
722  if (used_bytes < chunk_size) {
723    size_t chunk_free_bytes = chunk_size - used_bytes;
724    size_t& max_contiguous_allocation = *reinterpret_cast<size_t*>(arg);
725    max_contiguous_allocation = std::max(max_contiguous_allocation, chunk_free_bytes);
726  }
727}
728
729void Heap::ThrowOutOfMemoryError(Thread* self, size_t byte_count, bool large_object_allocation) {
730  std::ostringstream oss;
731  size_t total_bytes_free = GetFreeMemory();
732  oss << "Failed to allocate a " << byte_count << " byte allocation with " << total_bytes_free
733      << " free bytes";
734  // If the allocation failed due to fragmentation, print out the largest continuous allocation.
735  if (!large_object_allocation && total_bytes_free >= byte_count) {
736    size_t max_contiguous_allocation = 0;
737    for (const auto& space : continuous_spaces_) {
738      if (space->IsMallocSpace()) {
739        // To allow the Walk/InspectAll() to exclusively-lock the mutator
740        // lock, temporarily release the shared access to the mutator
741        // lock here by transitioning to the suspended state.
742        Locks::mutator_lock_->AssertSharedHeld(self);
743        self->TransitionFromRunnableToSuspended(kSuspended);
744        space->AsMallocSpace()->Walk(MSpaceChunkCallback, &max_contiguous_allocation);
745        self->TransitionFromSuspendedToRunnable();
746        Locks::mutator_lock_->AssertSharedHeld(self);
747      }
748    }
749    oss << "; failed due to fragmentation (largest possible contiguous allocation "
750        <<  max_contiguous_allocation << " bytes)";
751  }
752  self->ThrowOutOfMemoryError(oss.str().c_str());
753}
754
755void Heap::Trim() {
756  Thread* self = Thread::Current();
757  {
758    // Need to do this before acquiring the locks since we don't want to get suspended while
759    // holding any locks.
760    ScopedThreadStateChange tsc(self, kWaitingForGcToComplete);
761    // Pretend we are doing a GC to prevent background compaction from deleting the space we are
762    // trimming.
763    MutexLock mu(self, *gc_complete_lock_);
764    // Ensure there is only one GC at a time.
765    WaitForGcToCompleteLocked(self);
766    collector_type_running_ = kCollectorTypeHeapTrim;
767  }
768  uint64_t start_ns = NanoTime();
769  // Trim the managed spaces.
770  uint64_t total_alloc_space_allocated = 0;
771  uint64_t total_alloc_space_size = 0;
772  uint64_t managed_reclaimed = 0;
773  for (const auto& space : continuous_spaces_) {
774    if (space->IsMallocSpace()) {
775      gc::space::MallocSpace* alloc_space = space->AsMallocSpace();
776      total_alloc_space_size += alloc_space->Size();
777      managed_reclaimed += alloc_space->Trim();
778    }
779  }
780  total_alloc_space_allocated = GetBytesAllocated() - large_object_space_->GetBytesAllocated() -
781      bump_pointer_space_->Size();
782  const float managed_utilization = static_cast<float>(total_alloc_space_allocated) /
783      static_cast<float>(total_alloc_space_size);
784  uint64_t gc_heap_end_ns = NanoTime();
785  // We never move things in the native heap, so we can finish the GC at this point.
786  FinishGC(self, collector::kGcTypeNone);
787  // Trim the native heap.
788  dlmalloc_trim(0);
789  size_t native_reclaimed = 0;
790  dlmalloc_inspect_all(DlmallocMadviseCallback, &native_reclaimed);
791  uint64_t end_ns = NanoTime();
792  VLOG(heap) << "Heap trim of managed (duration=" << PrettyDuration(gc_heap_end_ns - start_ns)
793      << ", advised=" << PrettySize(managed_reclaimed) << ") and native (duration="
794      << PrettyDuration(end_ns - gc_heap_end_ns) << ", advised=" << PrettySize(native_reclaimed)
795      << ") heaps. Managed heap utilization of " << static_cast<int>(100 * managed_utilization)
796      << "%.";
797}
798
799bool Heap::IsValidObjectAddress(const mirror::Object* obj) const {
800  // Note: we deliberately don't take the lock here, and mustn't test anything that would require
801  // taking the lock.
802  if (obj == nullptr) {
803    return true;
804  }
805  return IsAligned<kObjectAlignment>(obj) && IsHeapAddress(obj);
806}
807
808bool Heap::IsNonDiscontinuousSpaceHeapAddress(const mirror::Object* obj) const {
809  return FindContinuousSpaceFromObject(obj, true) != nullptr;
810}
811
812bool Heap::IsHeapAddress(const mirror::Object* obj) const {
813  // TODO: This might not work for large objects.
814  return FindSpaceFromObject(obj, true) != nullptr;
815}
816
817bool Heap::IsLiveObjectLocked(mirror::Object* obj, bool search_allocation_stack,
818                              bool search_live_stack, bool sorted) {
819  if (UNLIKELY(!IsAligned<kObjectAlignment>(obj))) {
820    return false;
821  }
822  if (bump_pointer_space_ != nullptr && bump_pointer_space_->HasAddress(obj)) {
823    mirror::Class* klass = obj->GetClass();
824    if (obj == klass) {
825      // This case happens for java.lang.Class.
826      return true;
827    }
828    return VerifyClassClass(klass) && IsLiveObjectLocked(klass);
829  } else if (temp_space_ != nullptr && temp_space_->HasAddress(obj)) {
830    return false;
831  }
832  space::ContinuousSpace* c_space = FindContinuousSpaceFromObject(obj, true);
833  space::DiscontinuousSpace* d_space = NULL;
834  if (c_space != nullptr) {
835    if (c_space->GetLiveBitmap()->Test(obj)) {
836      return true;
837    }
838  } else {
839    d_space = FindDiscontinuousSpaceFromObject(obj, true);
840    if (d_space != nullptr) {
841      if (d_space->GetLiveObjects()->Test(obj)) {
842        return true;
843      }
844    }
845  }
846  // This is covering the allocation/live stack swapping that is done without mutators suspended.
847  for (size_t i = 0; i < (sorted ? 1 : 5); ++i) {
848    if (i > 0) {
849      NanoSleep(MsToNs(10));
850    }
851    if (search_allocation_stack) {
852      if (sorted) {
853        if (allocation_stack_->ContainsSorted(const_cast<mirror::Object*>(obj))) {
854          return true;
855        }
856      } else if (allocation_stack_->Contains(const_cast<mirror::Object*>(obj))) {
857        return true;
858      }
859    }
860
861    if (search_live_stack) {
862      if (sorted) {
863        if (live_stack_->ContainsSorted(const_cast<mirror::Object*>(obj))) {
864          return true;
865        }
866      } else if (live_stack_->Contains(const_cast<mirror::Object*>(obj))) {
867        return true;
868      }
869    }
870  }
871  // We need to check the bitmaps again since there is a race where we mark something as live and
872  // then clear the stack containing it.
873  if (c_space != nullptr) {
874    if (c_space->GetLiveBitmap()->Test(obj)) {
875      return true;
876    }
877  } else {
878    d_space = FindDiscontinuousSpaceFromObject(obj, true);
879    if (d_space != nullptr && d_space->GetLiveObjects()->Test(obj)) {
880      return true;
881    }
882  }
883  return false;
884}
885
886void Heap::VerifyObjectImpl(mirror::Object* obj) {
887  if (Thread::Current() == NULL ||
888      Runtime::Current()->GetThreadList()->GetLockOwner() == Thread::Current()->GetTid()) {
889    return;
890  }
891  VerifyObjectBody(obj);
892}
893
894bool Heap::VerifyClassClass(const mirror::Class* c) const {
895  // Note: we don't use the accessors here as they have internal sanity checks that we don't want
896  // to run
897  const byte* raw_addr =
898      reinterpret_cast<const byte*>(c) + mirror::Object::ClassOffset().Int32Value();
899  mirror::Class* c_c = reinterpret_cast<mirror::HeapReference<mirror::Class> const *>(raw_addr)->AsMirrorPtr();
900  raw_addr = reinterpret_cast<const byte*>(c_c) + mirror::Object::ClassOffset().Int32Value();
901  mirror::Class* c_c_c = reinterpret_cast<mirror::HeapReference<mirror::Class> const *>(raw_addr)->AsMirrorPtr();
902  return c_c == c_c_c;
903}
904
905void Heap::DumpSpaces(std::ostream& stream) {
906  for (const auto& space : continuous_spaces_) {
907    accounting::SpaceBitmap* live_bitmap = space->GetLiveBitmap();
908    accounting::SpaceBitmap* mark_bitmap = space->GetMarkBitmap();
909    stream << space << " " << *space << "\n";
910    if (live_bitmap != nullptr) {
911      stream << live_bitmap << " " << *live_bitmap << "\n";
912    }
913    if (mark_bitmap != nullptr) {
914      stream << mark_bitmap << " " << *mark_bitmap << "\n";
915    }
916  }
917  for (const auto& space : discontinuous_spaces_) {
918    stream << space << " " << *space << "\n";
919  }
920}
921
922void Heap::VerifyObjectBody(mirror::Object* obj) {
923  CHECK(IsAligned<kObjectAlignment>(obj)) << "Object isn't aligned: " << obj;
924  // Ignore early dawn of the universe verifications.
925  if (UNLIKELY(static_cast<size_t>(num_bytes_allocated_.Load()) < 10 * KB)) {
926    return;
927  }
928  const byte* raw_addr = reinterpret_cast<const byte*>(obj) +
929      mirror::Object::ClassOffset().Int32Value();
930  mirror::Class* c = reinterpret_cast<mirror::HeapReference<mirror::Class> const *>(raw_addr)->AsMirrorPtr();
931  if (UNLIKELY(c == NULL)) {
932    LOG(FATAL) << "Null class in object: " << obj;
933  } else if (UNLIKELY(!IsAligned<kObjectAlignment>(c))) {
934    LOG(FATAL) << "Class isn't aligned: " << c << " in object: " << obj;
935  }
936  CHECK(VerifyClassClass(c));
937
938  if (verify_object_mode_ > kVerifyAllFast) {
939    // TODO: the bitmap tests below are racy if VerifyObjectBody is called without the
940    //       heap_bitmap_lock_.
941    if (!IsLiveObjectLocked(obj)) {
942      DumpSpaces();
943      LOG(FATAL) << "Object is dead: " << obj;
944    }
945    if (!IsLiveObjectLocked(c)) {
946      LOG(FATAL) << "Class of object is dead: " << c << " in object: " << obj;
947    }
948  }
949}
950
951void Heap::VerificationCallback(mirror::Object* obj, void* arg) {
952  DCHECK(obj != NULL);
953  reinterpret_cast<Heap*>(arg)->VerifyObjectBody(obj);
954}
955
956void Heap::VerifyHeap() {
957  ReaderMutexLock mu(Thread::Current(), *Locks::heap_bitmap_lock_);
958  GetLiveBitmap()->Walk(Heap::VerificationCallback, this);
959}
960
961void Heap::RecordFree(size_t freed_objects, size_t freed_bytes) {
962  DCHECK_LE(freed_bytes, num_bytes_allocated_.Load());
963  num_bytes_allocated_.FetchAndSub(freed_bytes);
964  if (Runtime::Current()->HasStatsEnabled()) {
965    RuntimeStats* thread_stats = Thread::Current()->GetStats();
966    thread_stats->freed_objects += freed_objects;
967    thread_stats->freed_bytes += freed_bytes;
968    // TODO: Do this concurrently.
969    RuntimeStats* global_stats = Runtime::Current()->GetStats();
970    global_stats->freed_objects += freed_objects;
971    global_stats->freed_bytes += freed_bytes;
972  }
973}
974
975mirror::Object* Heap::AllocateInternalWithGc(Thread* self, AllocatorType allocator,
976                                             size_t alloc_size, size_t* bytes_allocated,
977                                             mirror::Class** klass) {
978  mirror::Object* ptr = nullptr;
979  bool was_default_allocator = allocator == GetCurrentAllocator();
980  DCHECK(klass != nullptr);
981  SirtRef<mirror::Class> sirt_klass(self, *klass);
982  // The allocation failed. If the GC is running, block until it completes, and then retry the
983  // allocation.
984  collector::GcType last_gc = WaitForGcToComplete(self);
985  if (last_gc != collector::kGcTypeNone) {
986    // If we were the default allocator but the allocator changed while we were suspended,
987    // abort the allocation.
988    if (was_default_allocator && allocator != GetCurrentAllocator()) {
989      *klass = sirt_klass.get();
990      return nullptr;
991    }
992    // A GC was in progress and we blocked, retry allocation now that memory has been freed.
993    ptr = TryToAllocate<true, false>(self, allocator, alloc_size, bytes_allocated);
994  }
995
996  // Loop through our different Gc types and try to Gc until we get enough free memory.
997  for (collector::GcType gc_type : gc_plan_) {
998    if (ptr != nullptr) {
999      break;
1000    }
1001    // Attempt to run the collector, if we succeed, re-try the allocation.
1002    bool gc_ran =
1003        CollectGarbageInternal(gc_type, kGcCauseForAlloc, false) != collector::kGcTypeNone;
1004    if (was_default_allocator && allocator != GetCurrentAllocator()) {
1005      *klass = sirt_klass.get();
1006      return nullptr;
1007    }
1008    if (gc_ran) {
1009      // Did we free sufficient memory for the allocation to succeed?
1010      ptr = TryToAllocate<true, false>(self, allocator, alloc_size, bytes_allocated);
1011    }
1012  }
1013  // Allocations have failed after GCs;  this is an exceptional state.
1014  if (ptr == nullptr) {
1015    // Try harder, growing the heap if necessary.
1016    ptr = TryToAllocate<true, true>(self, allocator, alloc_size, bytes_allocated);
1017  }
1018  if (ptr == nullptr) {
1019    // Most allocations should have succeeded by now, so the heap is really full, really fragmented,
1020    // or the requested size is really big. Do another GC, collecting SoftReferences this time. The
1021    // VM spec requires that all SoftReferences have been collected and cleared before throwing
1022    // OOME.
1023    VLOG(gc) << "Forcing collection of SoftReferences for " << PrettySize(alloc_size)
1024             << " allocation";
1025    // TODO: Run finalization, but this may cause more allocations to occur.
1026    // We don't need a WaitForGcToComplete here either.
1027    DCHECK(!gc_plan_.empty());
1028    CollectGarbageInternal(gc_plan_.back(), kGcCauseForAlloc, true);
1029    if (was_default_allocator && allocator != GetCurrentAllocator()) {
1030      *klass = sirt_klass.get();
1031      return nullptr;
1032    }
1033    ptr = TryToAllocate<true, true>(self, allocator, alloc_size, bytes_allocated);
1034    if (ptr == nullptr) {
1035      ThrowOutOfMemoryError(self, alloc_size, false);
1036    }
1037  }
1038  *klass = sirt_klass.get();
1039  return ptr;
1040}
1041
1042void Heap::SetTargetHeapUtilization(float target) {
1043  DCHECK_GT(target, 0.0f);  // asserted in Java code
1044  DCHECK_LT(target, 1.0f);
1045  target_utilization_ = target;
1046}
1047
1048size_t Heap::GetObjectsAllocated() const {
1049  size_t total = 0;
1050  for (space::AllocSpace* space : alloc_spaces_) {
1051    total += space->GetObjectsAllocated();
1052  }
1053  return total;
1054}
1055
1056size_t Heap::GetObjectsAllocatedEver() const {
1057  return GetObjectsFreedEver() + GetObjectsAllocated();
1058}
1059
1060size_t Heap::GetBytesAllocatedEver() const {
1061  return GetBytesFreedEver() + GetBytesAllocated();
1062}
1063
1064class InstanceCounter {
1065 public:
1066  InstanceCounter(const std::vector<mirror::Class*>& classes, bool use_is_assignable_from, uint64_t* counts)
1067      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_)
1068      : classes_(classes), use_is_assignable_from_(use_is_assignable_from), counts_(counts) {
1069  }
1070  static void Callback(mirror::Object* obj, void* arg)
1071      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_) {
1072    InstanceCounter* instance_counter = reinterpret_cast<InstanceCounter*>(arg);
1073    mirror::Class* instance_class = obj->GetClass();
1074    CHECK(instance_class != nullptr);
1075    for (size_t i = 0; i < instance_counter->classes_.size(); ++i) {
1076      if (instance_counter->use_is_assignable_from_) {
1077        if (instance_counter->classes_[i]->IsAssignableFrom(instance_class)) {
1078          ++instance_counter->counts_[i];
1079        }
1080      } else if (instance_class == instance_counter->classes_[i]) {
1081        ++instance_counter->counts_[i];
1082      }
1083    }
1084  }
1085
1086 private:
1087  const std::vector<mirror::Class*>& classes_;
1088  bool use_is_assignable_from_;
1089  uint64_t* const counts_;
1090  DISALLOW_COPY_AND_ASSIGN(InstanceCounter);
1091};
1092
1093void Heap::CountInstances(const std::vector<mirror::Class*>& classes, bool use_is_assignable_from,
1094                          uint64_t* counts) {
1095  // Can't do any GC in this function since this may move classes.
1096  Thread* self = Thread::Current();
1097  auto* old_cause = self->StartAssertNoThreadSuspension("CountInstances");
1098  InstanceCounter counter(classes, use_is_assignable_from, counts);
1099  WriterMutexLock mu(self, *Locks::heap_bitmap_lock_);
1100  VisitObjects(InstanceCounter::Callback, &counter);
1101  self->EndAssertNoThreadSuspension(old_cause);
1102}
1103
1104class InstanceCollector {
1105 public:
1106  InstanceCollector(mirror::Class* c, int32_t max_count, std::vector<mirror::Object*>& instances)
1107      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_)
1108      : class_(c), max_count_(max_count), instances_(instances) {
1109  }
1110  static void Callback(mirror::Object* obj, void* arg)
1111      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_) {
1112    DCHECK(arg != nullptr);
1113    InstanceCollector* instance_collector = reinterpret_cast<InstanceCollector*>(arg);
1114    mirror::Class* instance_class = obj->GetClass();
1115    if (instance_class == instance_collector->class_) {
1116      if (instance_collector->max_count_ == 0 ||
1117          instance_collector->instances_.size() < instance_collector->max_count_) {
1118        instance_collector->instances_.push_back(obj);
1119      }
1120    }
1121  }
1122
1123 private:
1124  mirror::Class* class_;
1125  uint32_t max_count_;
1126  std::vector<mirror::Object*>& instances_;
1127  DISALLOW_COPY_AND_ASSIGN(InstanceCollector);
1128};
1129
1130void Heap::GetInstances(mirror::Class* c, int32_t max_count,
1131                        std::vector<mirror::Object*>& instances) {
1132  // Can't do any GC in this function since this may move classes.
1133  Thread* self = Thread::Current();
1134  auto* old_cause = self->StartAssertNoThreadSuspension("GetInstances");
1135  InstanceCollector collector(c, max_count, instances);
1136  WriterMutexLock mu(self, *Locks::heap_bitmap_lock_);
1137  VisitObjects(&InstanceCollector::Callback, &collector);
1138  self->EndAssertNoThreadSuspension(old_cause);
1139}
1140
1141class ReferringObjectsFinder {
1142 public:
1143  ReferringObjectsFinder(mirror::Object* object, int32_t max_count,
1144                         std::vector<mirror::Object*>& referring_objects)
1145      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_)
1146      : object_(object), max_count_(max_count), referring_objects_(referring_objects) {
1147  }
1148
1149  static void Callback(mirror::Object* obj, void* arg)
1150      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_) {
1151    reinterpret_cast<ReferringObjectsFinder*>(arg)->operator()(obj);
1152  }
1153
1154  // For bitmap Visit.
1155  // TODO: Fix lock analysis to not use NO_THREAD_SAFETY_ANALYSIS, requires support for
1156  // annotalysis on visitors.
1157  void operator()(const mirror::Object* o) const NO_THREAD_SAFETY_ANALYSIS {
1158    collector::MarkSweep::VisitObjectReferences(const_cast<mirror::Object*>(o), *this, true);
1159  }
1160
1161  // For MarkSweep::VisitObjectReferences.
1162  void operator()(mirror::Object* referrer, mirror::Object* object,
1163                  const MemberOffset&, bool) const {
1164    if (object == object_ && (max_count_ == 0 || referring_objects_.size() < max_count_)) {
1165      referring_objects_.push_back(referrer);
1166    }
1167  }
1168
1169 private:
1170  mirror::Object* object_;
1171  uint32_t max_count_;
1172  std::vector<mirror::Object*>& referring_objects_;
1173  DISALLOW_COPY_AND_ASSIGN(ReferringObjectsFinder);
1174};
1175
1176void Heap::GetReferringObjects(mirror::Object* o, int32_t max_count,
1177                               std::vector<mirror::Object*>& referring_objects) {
1178  // Can't do any GC in this function since this may move the object o.
1179  Thread* self = Thread::Current();
1180  auto* old_cause = self->StartAssertNoThreadSuspension("GetReferringObjects");
1181  ReferringObjectsFinder finder(o, max_count, referring_objects);
1182  WriterMutexLock mu(self, *Locks::heap_bitmap_lock_);
1183  VisitObjects(&ReferringObjectsFinder::Callback, &finder);
1184  self->EndAssertNoThreadSuspension(old_cause);
1185}
1186
1187void Heap::CollectGarbage(bool clear_soft_references) {
1188  // Even if we waited for a GC we still need to do another GC since weaks allocated during the
1189  // last GC will not have necessarily been cleared.
1190  CollectGarbageInternal(gc_plan_.back(), kGcCauseExplicit, clear_soft_references);
1191}
1192
1193void Heap::TransitionCollector(CollectorType collector_type) {
1194  if (collector_type == collector_type_) {
1195    return;
1196  }
1197  VLOG(heap) << "TransitionCollector: " << static_cast<int>(collector_type_)
1198             << " -> " << static_cast<int>(collector_type);
1199  uint64_t start_time = NanoTime();
1200  uint32_t before_size  = GetTotalMemory();
1201  uint32_t before_allocated = num_bytes_allocated_.Load();
1202  ThreadList* tl = Runtime::Current()->GetThreadList();
1203  Thread* self = Thread::Current();
1204  ScopedThreadStateChange tsc(self, kWaitingPerformingGc);
1205  Locks::mutator_lock_->AssertNotHeld(self);
1206  const bool copying_transition =
1207      IsCompactingGC(background_collector_type_) || IsCompactingGC(post_zygote_collector_type_);
1208  // Busy wait until we can GC (StartGC can fail if we have a non-zero
1209  // compacting_gc_disable_count_, this should rarely occurs).
1210  for (;;) {
1211    {
1212      ScopedThreadStateChange tsc(self, kWaitingForGcToComplete);
1213      MutexLock mu(self, *gc_complete_lock_);
1214      // Ensure there is only one GC at a time.
1215      WaitForGcToCompleteLocked(self);
1216      // GC can be disabled if someone has a used GetPrimitiveArrayCritical but not yet released.
1217      if (!copying_transition || disable_moving_gc_count_ == 0) {
1218        // TODO: Not hard code in semi-space collector?
1219        collector_type_running_ = copying_transition ? kCollectorTypeSS : collector_type;
1220        break;
1221      }
1222    }
1223    usleep(1000);
1224  }
1225  tl->SuspendAll();
1226  PreGcRosAllocVerification(&semi_space_collector_->GetTimings());
1227  switch (collector_type) {
1228    case kCollectorTypeSS:
1229      // Fall-through.
1230    case kCollectorTypeGSS: {
1231      mprotect(temp_space_->Begin(), temp_space_->Capacity(), PROT_READ | PROT_WRITE);
1232      CHECK(main_space_ != nullptr);
1233      Compact(temp_space_, main_space_);
1234      DCHECK(allocator_mem_map_.get() == nullptr);
1235      allocator_mem_map_.reset(main_space_->ReleaseMemMap());
1236      madvise(main_space_->Begin(), main_space_->Size(), MADV_DONTNEED);
1237      // RemoveSpace does not delete the removed space.
1238      space::Space* old_space = main_space_;
1239      RemoveSpace(old_space);
1240      delete old_space;
1241      break;
1242    }
1243    case kCollectorTypeMS:
1244      // Fall through.
1245    case kCollectorTypeCMS: {
1246      if (IsCompactingGC(collector_type_)) {
1247        // TODO: Use mem-map from temp space?
1248        MemMap* mem_map = allocator_mem_map_.release();
1249        CHECK(mem_map != nullptr);
1250        size_t initial_size = kDefaultInitialSize;
1251        mprotect(mem_map->Begin(), initial_size, PROT_READ | PROT_WRITE);
1252        CHECK(main_space_ == nullptr);
1253        if (kUseRosAlloc) {
1254          main_space_ =
1255              space::RosAllocSpace::CreateFromMemMap(mem_map, "alloc space", kPageSize,
1256                                                     initial_size, mem_map->Size(),
1257                                                     mem_map->Size(), low_memory_mode_);
1258        } else {
1259          main_space_ =
1260              space::DlMallocSpace::CreateFromMemMap(mem_map, "alloc space", kPageSize,
1261                                                     initial_size, mem_map->Size(),
1262                                                     mem_map->Size());
1263        }
1264        main_space_->SetFootprintLimit(main_space_->Capacity());
1265        AddSpace(main_space_);
1266        Compact(main_space_, bump_pointer_space_);
1267      }
1268      break;
1269    }
1270    default: {
1271      LOG(FATAL) << "Attempted to transition to invalid collector type";
1272      break;
1273    }
1274  }
1275  ChangeCollector(collector_type);
1276  PostGcRosAllocVerification(&semi_space_collector_->GetTimings());
1277  tl->ResumeAll();
1278  // Can't call into java code with all threads suspended.
1279  EnqueueClearedReferences();
1280  uint64_t duration = NanoTime() - start_time;
1281  GrowForUtilization(collector::kGcTypeFull, duration);
1282  FinishGC(self, collector::kGcTypeFull);
1283  int32_t after_size = GetTotalMemory();
1284  int32_t delta_size = before_size - after_size;
1285  int32_t after_allocated = num_bytes_allocated_.Load();
1286  int32_t delta_allocated = before_allocated - after_allocated;
1287  const std::string saved_bytes_str =
1288      delta_size < 0 ? "-" + PrettySize(-delta_size) : PrettySize(delta_size);
1289  LOG(INFO) << "Heap transition to " << process_state_ << " took "
1290      << PrettyDuration(duration) << " " << PrettySize(before_size) << "->"
1291      << PrettySize(after_size) << " from " << PrettySize(delta_allocated) << " to "
1292      << PrettySize(delta_size) << " saved";
1293}
1294
1295void Heap::ChangeCollector(CollectorType collector_type) {
1296  // TODO: Only do this with all mutators suspended to avoid races.
1297  if (collector_type != collector_type_) {
1298    collector_type_ = collector_type;
1299    gc_plan_.clear();
1300    switch (collector_type_) {
1301      case kCollectorTypeSS:
1302        // Fall-through.
1303      case kCollectorTypeGSS: {
1304        concurrent_gc_ = false;
1305        gc_plan_.push_back(collector::kGcTypeFull);
1306        if (use_tlab_) {
1307          ChangeAllocator(kAllocatorTypeTLAB);
1308        } else {
1309          ChangeAllocator(kAllocatorTypeBumpPointer);
1310        }
1311        break;
1312      }
1313      case kCollectorTypeMS: {
1314        concurrent_gc_ = false;
1315        gc_plan_.push_back(collector::kGcTypeSticky);
1316        gc_plan_.push_back(collector::kGcTypePartial);
1317        gc_plan_.push_back(collector::kGcTypeFull);
1318        ChangeAllocator(kUseRosAlloc ? kAllocatorTypeRosAlloc : kAllocatorTypeDlMalloc);
1319        break;
1320      }
1321      case kCollectorTypeCMS: {
1322        concurrent_gc_ = true;
1323        gc_plan_.push_back(collector::kGcTypeSticky);
1324        gc_plan_.push_back(collector::kGcTypePartial);
1325        gc_plan_.push_back(collector::kGcTypeFull);
1326        ChangeAllocator(kUseRosAlloc ? kAllocatorTypeRosAlloc : kAllocatorTypeDlMalloc);
1327        break;
1328      }
1329      default: {
1330        LOG(FATAL) << "Unimplemented";
1331      }
1332    }
1333    if (concurrent_gc_) {
1334      concurrent_start_bytes_ =
1335          std::max(max_allowed_footprint_, kMinConcurrentRemainingBytes) - kMinConcurrentRemainingBytes;
1336    } else {
1337      concurrent_start_bytes_ = std::numeric_limits<size_t>::max();
1338    }
1339  }
1340}
1341
1342// Special compacting collector which uses sub-optimal bin packing to reduce zygote space size.
1343class ZygoteCompactingCollector : public collector::SemiSpace {
1344 public:
1345  explicit ZygoteCompactingCollector(gc::Heap* heap) : SemiSpace(heap, "zygote collector") {
1346  }
1347
1348  void BuildBins(space::ContinuousSpace* space) {
1349    bin_live_bitmap_ = space->GetLiveBitmap();
1350    bin_mark_bitmap_ = space->GetMarkBitmap();
1351    BinContext context;
1352    context.prev_ = reinterpret_cast<uintptr_t>(space->Begin());
1353    context.collector_ = this;
1354    WriterMutexLock mu(Thread::Current(), *Locks::heap_bitmap_lock_);
1355    // Note: This requires traversing the space in increasing order of object addresses.
1356    bin_live_bitmap_->Walk(Callback, reinterpret_cast<void*>(&context));
1357    // Add the last bin which spans after the last object to the end of the space.
1358    AddBin(reinterpret_cast<uintptr_t>(space->End()) - context.prev_, context.prev_);
1359  }
1360
1361 private:
1362  struct BinContext {
1363    uintptr_t prev_;  // The end of the previous object.
1364    ZygoteCompactingCollector* collector_;
1365  };
1366  // Maps from bin sizes to locations.
1367  std::multimap<size_t, uintptr_t> bins_;
1368  // Live bitmap of the space which contains the bins.
1369  accounting::SpaceBitmap* bin_live_bitmap_;
1370  // Mark bitmap of the space which contains the bins.
1371  accounting::SpaceBitmap* bin_mark_bitmap_;
1372
1373  static void Callback(mirror::Object* obj, void* arg)
1374      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
1375    DCHECK(arg != nullptr);
1376    BinContext* context = reinterpret_cast<BinContext*>(arg);
1377    ZygoteCompactingCollector* collector = context->collector_;
1378    uintptr_t object_addr = reinterpret_cast<uintptr_t>(obj);
1379    size_t bin_size = object_addr - context->prev_;
1380    // Add the bin consisting of the end of the previous object to the start of the current object.
1381    collector->AddBin(bin_size, context->prev_);
1382    context->prev_ = object_addr + RoundUp(obj->SizeOf(), kObjectAlignment);
1383  }
1384
1385  void AddBin(size_t size, uintptr_t position) {
1386    if (size != 0) {
1387      bins_.insert(std::make_pair(size, position));
1388    }
1389  }
1390
1391  virtual bool ShouldSweepSpace(space::ContinuousSpace* space) const {
1392    // Don't sweep any spaces since we probably blasted the internal accounting of the free list
1393    // allocator.
1394    return false;
1395  }
1396
1397  virtual mirror::Object* MarkNonForwardedObject(mirror::Object* obj)
1398      EXCLUSIVE_LOCKS_REQUIRED(Locks::heap_bitmap_lock_, Locks::mutator_lock_) {
1399    size_t object_size = RoundUp(obj->SizeOf(), kObjectAlignment);
1400    mirror::Object* forward_address;
1401    // Find the smallest bin which we can move obj in.
1402    auto it = bins_.lower_bound(object_size);
1403    if (it == bins_.end()) {
1404      // No available space in the bins, place it in the target space instead (grows the zygote
1405      // space).
1406      size_t bytes_allocated;
1407      forward_address = to_space_->Alloc(self_, object_size, &bytes_allocated);
1408      if (to_space_live_bitmap_ != nullptr) {
1409        to_space_live_bitmap_->Set(forward_address);
1410      } else {
1411        GetHeap()->GetNonMovingSpace()->GetLiveBitmap()->Set(forward_address);
1412        GetHeap()->GetNonMovingSpace()->GetMarkBitmap()->Set(forward_address);
1413      }
1414    } else {
1415      size_t size = it->first;
1416      uintptr_t pos = it->second;
1417      bins_.erase(it);  // Erase the old bin which we replace with the new smaller bin.
1418      forward_address = reinterpret_cast<mirror::Object*>(pos);
1419      // Set the live and mark bits so that sweeping system weaks works properly.
1420      bin_live_bitmap_->Set(forward_address);
1421      bin_mark_bitmap_->Set(forward_address);
1422      DCHECK_GE(size, object_size);
1423      AddBin(size - object_size, pos + object_size);  // Add a new bin with the remaining space.
1424    }
1425    // Copy the object over to its new location.
1426    memcpy(reinterpret_cast<void*>(forward_address), obj, object_size);
1427    return forward_address;
1428  }
1429};
1430
1431void Heap::UnBindBitmaps() {
1432  for (const auto& space : GetContinuousSpaces()) {
1433    if (space->IsContinuousMemMapAllocSpace()) {
1434      space::ContinuousMemMapAllocSpace* alloc_space = space->AsContinuousMemMapAllocSpace();
1435      if (alloc_space->HasBoundBitmaps()) {
1436        alloc_space->UnBindBitmaps();
1437      }
1438    }
1439  }
1440}
1441
1442void Heap::PreZygoteFork() {
1443  CollectGarbageInternal(collector::kGcTypeFull, kGcCauseBackground, false);
1444  static Mutex zygote_creation_lock_("zygote creation lock", kZygoteCreationLock);
1445  Thread* self = Thread::Current();
1446  MutexLock mu(self, zygote_creation_lock_);
1447  // Try to see if we have any Zygote spaces.
1448  if (have_zygote_space_) {
1449    return;
1450  }
1451  VLOG(heap) << "Starting PreZygoteFork";
1452  // Trim the pages at the end of the non moving space.
1453  non_moving_space_->Trim();
1454  non_moving_space_->GetMemMap()->Protect(PROT_READ | PROT_WRITE);
1455  // Change the collector to the post zygote one.
1456  ChangeCollector(post_zygote_collector_type_);
1457  // TODO: Delete bump_pointer_space_ and temp_pointer_space_?
1458  if (semi_space_collector_ != nullptr) {
1459    // Temporarily disable rosalloc verification because the zygote
1460    // compaction will mess up the rosalloc internal metadata.
1461    ScopedDisableRosAllocVerification disable_rosalloc_verif(this);
1462    ZygoteCompactingCollector zygote_collector(this);
1463    zygote_collector.BuildBins(non_moving_space_);
1464    // Create a new bump pointer space which we will compact into.
1465    space::BumpPointerSpace target_space("zygote bump space", non_moving_space_->End(),
1466                                         non_moving_space_->Limit());
1467    // Compact the bump pointer space to a new zygote bump pointer space.
1468    temp_space_->GetMemMap()->Protect(PROT_READ | PROT_WRITE);
1469    zygote_collector.SetFromSpace(bump_pointer_space_);
1470    zygote_collector.SetToSpace(&target_space);
1471    zygote_collector.Run(kGcCauseCollectorTransition, false);
1472    CHECK(temp_space_->IsEmpty());
1473    total_objects_freed_ever_ += semi_space_collector_->GetFreedObjects();
1474    total_bytes_freed_ever_ += semi_space_collector_->GetFreedBytes();
1475    // Update the end and write out image.
1476    non_moving_space_->SetEnd(target_space.End());
1477    non_moving_space_->SetLimit(target_space.Limit());
1478    VLOG(heap) << "Zygote size " << non_moving_space_->Size() << " bytes";
1479  }
1480  // Save the old space so that we can remove it after we complete creating the zygote space.
1481  space::MallocSpace* old_alloc_space = non_moving_space_;
1482  // Turn the current alloc space into a zygote space and obtain the new alloc space composed of
1483  // the remaining available space.
1484  // Remove the old space before creating the zygote space since creating the zygote space sets
1485  // the old alloc space's bitmaps to nullptr.
1486  RemoveSpace(old_alloc_space);
1487  space::ZygoteSpace* zygote_space = old_alloc_space->CreateZygoteSpace("alloc space",
1488                                                                        low_memory_mode_,
1489                                                                        &main_space_);
1490  delete old_alloc_space;
1491  CHECK(zygote_space != nullptr) << "Failed creating zygote space";
1492  AddSpace(zygote_space, false);
1493  CHECK(main_space_ != nullptr);
1494  if (main_space_->IsRosAllocSpace()) {
1495    rosalloc_space_ = main_space_->AsRosAllocSpace();
1496  } else if (main_space_->IsDlMallocSpace()) {
1497    dlmalloc_space_ = main_space_->AsDlMallocSpace();
1498  }
1499  main_space_->SetFootprintLimit(main_space_->Capacity());
1500  AddSpace(main_space_);
1501  have_zygote_space_ = true;
1502  // Create the zygote space mod union table.
1503  accounting::ModUnionTable* mod_union_table =
1504      new accounting::ModUnionTableCardCache("zygote space mod-union table", this, zygote_space);
1505  CHECK(mod_union_table != nullptr) << "Failed to create zygote space mod-union table";
1506  AddModUnionTable(mod_union_table);
1507  // Reset the cumulative loggers since we now have a few additional timing phases.
1508  for (const auto& collector : garbage_collectors_) {
1509    collector->ResetCumulativeStatistics();
1510  }
1511  // Can't use RosAlloc for non moving space due to thread local buffers.
1512  // TODO: Non limited space for non-movable objects?
1513  MemMap* mem_map = post_zygote_non_moving_space_mem_map_.release();
1514  space::MallocSpace* new_non_moving_space =
1515      space::DlMallocSpace::CreateFromMemMap(mem_map, "Non moving dlmalloc space", kPageSize,
1516                                             2 * MB, mem_map->Size(), mem_map->Size());
1517  AddSpace(new_non_moving_space, false);
1518  CHECK(new_non_moving_space != nullptr) << "Failed to create new non-moving space";
1519  new_non_moving_space->SetFootprintLimit(new_non_moving_space->Capacity());
1520  non_moving_space_ = new_non_moving_space;
1521}
1522
1523void Heap::FlushAllocStack() {
1524  MarkAllocStackAsLive(allocation_stack_.get());
1525  allocation_stack_->Reset();
1526}
1527
1528void Heap::MarkAllocStack(accounting::SpaceBitmap* bitmap1,
1529                          accounting::SpaceBitmap* bitmap2,
1530                          accounting::ObjectSet* large_objects,
1531                          accounting::ObjectStack* stack) {
1532  DCHECK(bitmap1 != nullptr);
1533  DCHECK(bitmap2 != nullptr);
1534  mirror::Object** limit = stack->End();
1535  for (mirror::Object** it = stack->Begin(); it != limit; ++it) {
1536    const mirror::Object* obj = *it;
1537    if (!kUseThreadLocalAllocationStack || obj != nullptr) {
1538      if (bitmap1->HasAddress(obj)) {
1539        bitmap1->Set(obj);
1540      } else if (bitmap2->HasAddress(obj)) {
1541        bitmap2->Set(obj);
1542      } else {
1543        large_objects->Set(obj);
1544      }
1545    }
1546  }
1547}
1548
1549void Heap::SwapSemiSpaces() {
1550  // Swap the spaces so we allocate into the space which we just evacuated.
1551  std::swap(bump_pointer_space_, temp_space_);
1552}
1553
1554void Heap::Compact(space::ContinuousMemMapAllocSpace* target_space,
1555                   space::ContinuousMemMapAllocSpace* source_space) {
1556  CHECK(kMovingCollector);
1557  CHECK_NE(target_space, source_space) << "In-place compaction currently unsupported";
1558  if (target_space != source_space) {
1559    semi_space_collector_->SetFromSpace(source_space);
1560    semi_space_collector_->SetToSpace(target_space);
1561    semi_space_collector_->Run(kGcCauseCollectorTransition, false);
1562  }
1563}
1564
1565collector::GcType Heap::CollectGarbageInternal(collector::GcType gc_type, GcCause gc_cause,
1566                                               bool clear_soft_references) {
1567  Thread* self = Thread::Current();
1568  Runtime* runtime = Runtime::Current();
1569  // If the heap can't run the GC, silently fail and return that no GC was run.
1570  switch (gc_type) {
1571    case collector::kGcTypePartial: {
1572      if (!have_zygote_space_) {
1573        return collector::kGcTypeNone;
1574      }
1575      break;
1576    }
1577    default: {
1578      // Other GC types don't have any special cases which makes them not runnable. The main case
1579      // here is full GC.
1580    }
1581  }
1582  ScopedThreadStateChange tsc(self, kWaitingPerformingGc);
1583  Locks::mutator_lock_->AssertNotHeld(self);
1584  if (self->IsHandlingStackOverflow()) {
1585    LOG(WARNING) << "Performing GC on a thread that is handling a stack overflow.";
1586  }
1587  bool compacting_gc;
1588  {
1589    gc_complete_lock_->AssertNotHeld(self);
1590    ScopedThreadStateChange tsc(self, kWaitingForGcToComplete);
1591    MutexLock mu(self, *gc_complete_lock_);
1592    // Ensure there is only one GC at a time.
1593    WaitForGcToCompleteLocked(self);
1594    compacting_gc = IsCompactingGC(collector_type_);
1595    // GC can be disabled if someone has a used GetPrimitiveArrayCritical.
1596    if (compacting_gc && disable_moving_gc_count_ != 0) {
1597      LOG(WARNING) << "Skipping GC due to disable moving GC count " << disable_moving_gc_count_;
1598      return collector::kGcTypeNone;
1599    }
1600    collector_type_running_ = collector_type_;
1601  }
1602
1603  if (gc_cause == kGcCauseForAlloc && runtime->HasStatsEnabled()) {
1604    ++runtime->GetStats()->gc_for_alloc_count;
1605    ++self->GetStats()->gc_for_alloc_count;
1606  }
1607  uint64_t gc_start_time_ns = NanoTime();
1608  uint64_t gc_start_size = GetBytesAllocated();
1609  // Approximate allocation rate in bytes / second.
1610  uint64_t ms_delta = NsToMs(gc_start_time_ns - last_gc_time_ns_);
1611  // Back to back GCs can cause 0 ms of wait time in between GC invocations.
1612  if (LIKELY(ms_delta != 0)) {
1613    allocation_rate_ = ((gc_start_size - last_gc_size_) * 1000) / ms_delta;
1614    VLOG(heap) << "Allocation rate: " << PrettySize(allocation_rate_) << "/s";
1615  }
1616
1617  DCHECK_LT(gc_type, collector::kGcTypeMax);
1618  DCHECK_NE(gc_type, collector::kGcTypeNone);
1619
1620  collector::GarbageCollector* collector = nullptr;
1621  // TODO: Clean this up.
1622  if (compacting_gc) {
1623    DCHECK(current_allocator_ == kAllocatorTypeBumpPointer ||
1624           current_allocator_ == kAllocatorTypeTLAB);
1625    gc_type = semi_space_collector_->GetGcType();
1626    CHECK(temp_space_->IsEmpty());
1627    semi_space_collector_->SetFromSpace(bump_pointer_space_);
1628    semi_space_collector_->SetToSpace(temp_space_);
1629    mprotect(temp_space_->Begin(), temp_space_->Capacity(), PROT_READ | PROT_WRITE);
1630    collector = semi_space_collector_;
1631    gc_type = collector::kGcTypeFull;
1632  } else if (current_allocator_ == kAllocatorTypeRosAlloc ||
1633      current_allocator_ == kAllocatorTypeDlMalloc) {
1634    for (const auto& cur_collector : garbage_collectors_) {
1635      if (cur_collector->IsConcurrent() == concurrent_gc_ &&
1636          cur_collector->GetGcType() == gc_type) {
1637        collector = cur_collector;
1638        break;
1639      }
1640    }
1641  } else {
1642    LOG(FATAL) << "Invalid current allocator " << current_allocator_;
1643  }
1644  CHECK(collector != nullptr)
1645      << "Could not find garbage collector with concurrent=" << concurrent_gc_
1646      << " and type=" << gc_type;
1647  ATRACE_BEGIN(StringPrintf("%s %s GC", PrettyCause(gc_cause), collector->GetName()).c_str());
1648  collector->Run(gc_cause, clear_soft_references);
1649  total_objects_freed_ever_ += collector->GetFreedObjects();
1650  total_bytes_freed_ever_ += collector->GetFreedBytes();
1651  // Enqueue cleared references.
1652  EnqueueClearedReferences();
1653  // Grow the heap so that we know when to perform the next GC.
1654  GrowForUtilization(gc_type, collector->GetDurationNs());
1655  if (CareAboutPauseTimes()) {
1656    const size_t duration = collector->GetDurationNs();
1657    std::vector<uint64_t> pauses = collector->GetPauseTimes();
1658    // GC for alloc pauses the allocating thread, so consider it as a pause.
1659    bool was_slow = duration > long_gc_log_threshold_ ||
1660        (gc_cause == kGcCauseForAlloc && duration > long_pause_log_threshold_);
1661    if (!was_slow) {
1662      for (uint64_t pause : pauses) {
1663        was_slow = was_slow || pause > long_pause_log_threshold_;
1664      }
1665    }
1666    if (was_slow) {
1667        const size_t percent_free = GetPercentFree();
1668        const size_t current_heap_size = GetBytesAllocated();
1669        const size_t total_memory = GetTotalMemory();
1670        std::ostringstream pause_string;
1671        for (size_t i = 0; i < pauses.size(); ++i) {
1672            pause_string << PrettyDuration((pauses[i] / 1000) * 1000)
1673                         << ((i != pauses.size() - 1) ? ", " : "");
1674        }
1675        LOG(INFO) << gc_cause << " " << collector->GetName()
1676                  << " GC freed "  <<  collector->GetFreedObjects() << "("
1677                  << PrettySize(collector->GetFreedBytes()) << ") AllocSpace objects, "
1678                  << collector->GetFreedLargeObjects() << "("
1679                  << PrettySize(collector->GetFreedLargeObjectBytes()) << ") LOS objects, "
1680                  << percent_free << "% free, " << PrettySize(current_heap_size) << "/"
1681                  << PrettySize(total_memory) << ", " << "paused " << pause_string.str()
1682                  << " total " << PrettyDuration((duration / 1000) * 1000);
1683        if (VLOG_IS_ON(heap)) {
1684            LOG(INFO) << Dumpable<TimingLogger>(collector->GetTimings());
1685        }
1686    }
1687  }
1688  FinishGC(self, gc_type);
1689  ATRACE_END();
1690
1691  // Inform DDMS that a GC completed.
1692  Dbg::GcDidFinish();
1693  return gc_type;
1694}
1695
1696void Heap::FinishGC(Thread* self, collector::GcType gc_type) {
1697  MutexLock mu(self, *gc_complete_lock_);
1698  collector_type_running_ = kCollectorTypeNone;
1699  if (gc_type != collector::kGcTypeNone) {
1700    last_gc_type_ = gc_type;
1701  }
1702  // Wake anyone who may have been waiting for the GC to complete.
1703  gc_complete_cond_->Broadcast(self);
1704}
1705
1706static mirror::Object* RootMatchesObjectVisitor(mirror::Object* root, void* arg,
1707                                                uint32_t /*thread_id*/, RootType /*root_type*/) {
1708  mirror::Object* obj = reinterpret_cast<mirror::Object*>(arg);
1709  if (root == obj) {
1710    LOG(INFO) << "Object " << obj << " is a root";
1711  }
1712  return root;
1713}
1714
1715class ScanVisitor {
1716 public:
1717  void operator()(const mirror::Object* obj) const {
1718    LOG(ERROR) << "Would have rescanned object " << obj;
1719  }
1720};
1721
1722// Verify a reference from an object.
1723class VerifyReferenceVisitor {
1724 public:
1725  explicit VerifyReferenceVisitor(Heap* heap)
1726      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_)
1727      : heap_(heap), failed_(false) {}
1728
1729  bool Failed() const {
1730    return failed_;
1731  }
1732
1733  // TODO: Fix lock analysis to not use NO_THREAD_SAFETY_ANALYSIS, requires support for smarter
1734  // analysis on visitors.
1735  void operator()(mirror::Object* obj, mirror::Object* ref,
1736                  const MemberOffset& offset, bool /* is_static */) const
1737      NO_THREAD_SAFETY_ANALYSIS {
1738    if (ref == nullptr || IsLive(ref)) {
1739      // Verify that the reference is live.
1740      return;
1741    }
1742    if (!failed_) {
1743      // Print message on only on first failure to prevent spam.
1744      LOG(ERROR) << "!!!!!!!!!!!!!!Heap corruption detected!!!!!!!!!!!!!!!!!!!";
1745      failed_ = true;
1746    }
1747    if (obj != nullptr) {
1748      accounting::CardTable* card_table = heap_->GetCardTable();
1749      accounting::ObjectStack* alloc_stack = heap_->allocation_stack_.get();
1750      accounting::ObjectStack* live_stack = heap_->live_stack_.get();
1751      byte* card_addr = card_table->CardFromAddr(obj);
1752      LOG(ERROR) << "Object " << obj << " references dead object " << ref << " at offset "
1753                 << offset << "\n card value = " << static_cast<int>(*card_addr);
1754      if (heap_->IsValidObjectAddress(obj->GetClass())) {
1755        LOG(ERROR) << "Obj type " << PrettyTypeOf(obj);
1756      } else {
1757        LOG(ERROR) << "Object " << obj << " class(" << obj->GetClass() << ") not a heap address";
1758      }
1759
1760      // Attmept to find the class inside of the recently freed objects.
1761      space::ContinuousSpace* ref_space = heap_->FindContinuousSpaceFromObject(ref, true);
1762      if (ref_space != nullptr && ref_space->IsMallocSpace()) {
1763        space::MallocSpace* space = ref_space->AsMallocSpace();
1764        mirror::Class* ref_class = space->FindRecentFreedObject(ref);
1765        if (ref_class != nullptr) {
1766          LOG(ERROR) << "Reference " << ref << " found as a recently freed object with class "
1767                     << PrettyClass(ref_class);
1768        } else {
1769          LOG(ERROR) << "Reference " << ref << " not found as a recently freed object";
1770        }
1771      }
1772
1773      if (ref->GetClass() != nullptr && heap_->IsValidObjectAddress(ref->GetClass()) &&
1774          ref->GetClass()->IsClass()) {
1775        LOG(ERROR) << "Ref type " << PrettyTypeOf(ref);
1776      } else {
1777        LOG(ERROR) << "Ref " << ref << " class(" << ref->GetClass()
1778                   << ") is not a valid heap address";
1779      }
1780
1781      card_table->CheckAddrIsInCardTable(reinterpret_cast<const byte*>(obj));
1782      void* cover_begin = card_table->AddrFromCard(card_addr);
1783      void* cover_end = reinterpret_cast<void*>(reinterpret_cast<size_t>(cover_begin) +
1784          accounting::CardTable::kCardSize);
1785      LOG(ERROR) << "Card " << reinterpret_cast<void*>(card_addr) << " covers " << cover_begin
1786          << "-" << cover_end;
1787      accounting::SpaceBitmap* bitmap = heap_->GetLiveBitmap()->GetContinuousSpaceBitmap(obj);
1788
1789      if (bitmap == nullptr) {
1790        LOG(ERROR) << "Object " << obj << " has no bitmap";
1791        if (!heap_->VerifyClassClass(obj->GetClass())) {
1792          LOG(ERROR) << "Object " << obj << " failed class verification!";
1793        }
1794      } else {
1795        // Print out how the object is live.
1796        if (bitmap->Test(obj)) {
1797          LOG(ERROR) << "Object " << obj << " found in live bitmap";
1798        }
1799        if (alloc_stack->Contains(const_cast<mirror::Object*>(obj))) {
1800          LOG(ERROR) << "Object " << obj << " found in allocation stack";
1801        }
1802        if (live_stack->Contains(const_cast<mirror::Object*>(obj))) {
1803          LOG(ERROR) << "Object " << obj << " found in live stack";
1804        }
1805        if (alloc_stack->Contains(const_cast<mirror::Object*>(ref))) {
1806          LOG(ERROR) << "Ref " << ref << " found in allocation stack";
1807        }
1808        if (live_stack->Contains(const_cast<mirror::Object*>(ref))) {
1809          LOG(ERROR) << "Ref " << ref << " found in live stack";
1810        }
1811        // Attempt to see if the card table missed the reference.
1812        ScanVisitor scan_visitor;
1813        byte* byte_cover_begin = reinterpret_cast<byte*>(card_table->AddrFromCard(card_addr));
1814        card_table->Scan(bitmap, byte_cover_begin,
1815                         byte_cover_begin + accounting::CardTable::kCardSize, scan_visitor);
1816      }
1817
1818      // Search to see if any of the roots reference our object.
1819      void* arg = const_cast<void*>(reinterpret_cast<const void*>(obj));
1820      Runtime::Current()->VisitRoots(&RootMatchesObjectVisitor, arg, false, false);
1821
1822      // Search to see if any of the roots reference our reference.
1823      arg = const_cast<void*>(reinterpret_cast<const void*>(ref));
1824      Runtime::Current()->VisitRoots(&RootMatchesObjectVisitor, arg, false, false);
1825    } else {
1826      LOG(ERROR) << "Root " << ref << " is dead with type " << PrettyTypeOf(ref);
1827    }
1828  }
1829
1830  bool IsLive(mirror::Object* obj) const NO_THREAD_SAFETY_ANALYSIS {
1831    return heap_->IsLiveObjectLocked(obj, true, false, true);
1832  }
1833
1834  static mirror::Object* VerifyRoots(mirror::Object* root, void* arg, uint32_t /*thread_id*/,
1835                                     RootType /*root_type*/) {
1836    VerifyReferenceVisitor* visitor = reinterpret_cast<VerifyReferenceVisitor*>(arg);
1837    (*visitor)(nullptr, root, MemberOffset(0), true);
1838    return root;
1839  }
1840
1841 private:
1842  Heap* const heap_;
1843  mutable bool failed_;
1844};
1845
1846// Verify all references within an object, for use with HeapBitmap::Visit.
1847class VerifyObjectVisitor {
1848 public:
1849  explicit VerifyObjectVisitor(Heap* heap) : heap_(heap), failed_(false) {}
1850
1851  void operator()(mirror::Object* obj) const
1852      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_) {
1853    // Note: we are verifying the references in obj but not obj itself, this is because obj must
1854    // be live or else how did we find it in the live bitmap?
1855    VerifyReferenceVisitor visitor(heap_);
1856    // The class doesn't count as a reference but we should verify it anyways.
1857    collector::MarkSweep::VisitObjectReferences(obj, visitor, true);
1858    if (obj->GetClass()->IsReferenceClass()) {
1859      visitor(obj, heap_->GetReferenceReferent(obj), MemberOffset(0), false);
1860    }
1861    failed_ = failed_ || visitor.Failed();
1862  }
1863
1864  static void VisitCallback(mirror::Object* obj, void* arg)
1865      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_) {
1866    VerifyObjectVisitor* visitor = reinterpret_cast<VerifyObjectVisitor*>(arg);
1867    visitor->operator()(obj);
1868  }
1869
1870  bool Failed() const {
1871    return failed_;
1872  }
1873
1874 private:
1875  Heap* const heap_;
1876  mutable bool failed_;
1877};
1878
1879// Must do this with mutators suspended since we are directly accessing the allocation stacks.
1880bool Heap::VerifyHeapReferences() {
1881  Locks::mutator_lock_->AssertExclusiveHeld(Thread::Current());
1882  // Lets sort our allocation stacks so that we can efficiently binary search them.
1883  allocation_stack_->Sort();
1884  live_stack_->Sort();
1885  VerifyObjectVisitor visitor(this);
1886  // Verify objects in the allocation stack since these will be objects which were:
1887  // 1. Allocated prior to the GC (pre GC verification).
1888  // 2. Allocated during the GC (pre sweep GC verification).
1889  // We don't want to verify the objects in the live stack since they themselves may be
1890  // pointing to dead objects if they are not reachable.
1891  VisitObjects(VerifyObjectVisitor::VisitCallback, &visitor);
1892  // Verify the roots:
1893  Runtime::Current()->VisitRoots(VerifyReferenceVisitor::VerifyRoots, &visitor, false, false);
1894  if (visitor.Failed()) {
1895    // Dump mod-union tables.
1896    for (const auto& table_pair : mod_union_tables_) {
1897      accounting::ModUnionTable* mod_union_table = table_pair.second;
1898      mod_union_table->Dump(LOG(ERROR) << mod_union_table->GetName() << ": ");
1899    }
1900    DumpSpaces();
1901    return false;
1902  }
1903  return true;
1904}
1905
1906class VerifyReferenceCardVisitor {
1907 public:
1908  VerifyReferenceCardVisitor(Heap* heap, bool* failed)
1909      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_,
1910                            Locks::heap_bitmap_lock_)
1911      : heap_(heap), failed_(failed) {
1912  }
1913
1914  // TODO: Fix lock analysis to not use NO_THREAD_SAFETY_ANALYSIS, requires support for
1915  // annotalysis on visitors.
1916  void operator()(mirror::Object* obj, mirror::Object* ref, const MemberOffset& offset,
1917                  bool is_static) const NO_THREAD_SAFETY_ANALYSIS {
1918    // Filter out class references since changing an object's class does not mark the card as dirty.
1919    // Also handles large objects, since the only reference they hold is a class reference.
1920    if (ref != NULL && !ref->IsClass()) {
1921      accounting::CardTable* card_table = heap_->GetCardTable();
1922      // If the object is not dirty and it is referencing something in the live stack other than
1923      // class, then it must be on a dirty card.
1924      if (!card_table->AddrIsInCardTable(obj)) {
1925        LOG(ERROR) << "Object " << obj << " is not in the address range of the card table";
1926        *failed_ = true;
1927      } else if (!card_table->IsDirty(obj)) {
1928        // TODO: Check mod-union tables.
1929        // Card should be either kCardDirty if it got re-dirtied after we aged it, or
1930        // kCardDirty - 1 if it didnt get touched since we aged it.
1931        accounting::ObjectStack* live_stack = heap_->live_stack_.get();
1932        if (live_stack->ContainsSorted(const_cast<mirror::Object*>(ref))) {
1933          if (live_stack->ContainsSorted(const_cast<mirror::Object*>(obj))) {
1934            LOG(ERROR) << "Object " << obj << " found in live stack";
1935          }
1936          if (heap_->GetLiveBitmap()->Test(obj)) {
1937            LOG(ERROR) << "Object " << obj << " found in live bitmap";
1938          }
1939          LOG(ERROR) << "Object " << obj << " " << PrettyTypeOf(obj)
1940                    << " references " << ref << " " << PrettyTypeOf(ref) << " in live stack";
1941
1942          // Print which field of the object is dead.
1943          if (!obj->IsObjectArray()) {
1944            mirror::Class* klass = is_static ? obj->AsClass() : obj->GetClass();
1945            CHECK(klass != NULL);
1946            mirror::ObjectArray<mirror::ArtField>* fields = is_static ? klass->GetSFields()
1947                                                                      : klass->GetIFields();
1948            CHECK(fields != NULL);
1949            for (int32_t i = 0; i < fields->GetLength(); ++i) {
1950              mirror::ArtField* cur = fields->Get(i);
1951              if (cur->GetOffset().Int32Value() == offset.Int32Value()) {
1952                LOG(ERROR) << (is_static ? "Static " : "") << "field in the live stack is "
1953                          << PrettyField(cur);
1954                break;
1955              }
1956            }
1957          } else {
1958            mirror::ObjectArray<mirror::Object>* object_array =
1959                obj->AsObjectArray<mirror::Object>();
1960            for (int32_t i = 0; i < object_array->GetLength(); ++i) {
1961              if (object_array->Get(i) == ref) {
1962                LOG(ERROR) << (is_static ? "Static " : "") << "obj[" << i << "] = ref";
1963              }
1964            }
1965          }
1966
1967          *failed_ = true;
1968        }
1969      }
1970    }
1971  }
1972
1973 private:
1974  Heap* const heap_;
1975  bool* const failed_;
1976};
1977
1978class VerifyLiveStackReferences {
1979 public:
1980  explicit VerifyLiveStackReferences(Heap* heap)
1981      : heap_(heap),
1982        failed_(false) {}
1983
1984  void operator()(mirror::Object* obj) const
1985      SHARED_LOCKS_REQUIRED(Locks::mutator_lock_, Locks::heap_bitmap_lock_) {
1986    VerifyReferenceCardVisitor visitor(heap_, const_cast<bool*>(&failed_));
1987    collector::MarkSweep::VisitObjectReferences(const_cast<mirror::Object*>(obj), visitor, true);
1988  }
1989
1990  bool Failed() const {
1991    return failed_;
1992  }
1993
1994 private:
1995  Heap* const heap_;
1996  bool failed_;
1997};
1998
1999bool Heap::VerifyMissingCardMarks() {
2000  Locks::mutator_lock_->AssertExclusiveHeld(Thread::Current());
2001
2002  // We need to sort the live stack since we binary search it.
2003  live_stack_->Sort();
2004  VerifyLiveStackReferences visitor(this);
2005  GetLiveBitmap()->Visit(visitor);
2006
2007  // We can verify objects in the live stack since none of these should reference dead objects.
2008  for (mirror::Object** it = live_stack_->Begin(); it != live_stack_->End(); ++it) {
2009    if (!kUseThreadLocalAllocationStack || *it != nullptr) {
2010      visitor(*it);
2011    }
2012  }
2013
2014  if (visitor.Failed()) {
2015    DumpSpaces();
2016    return false;
2017  }
2018  return true;
2019}
2020
2021void Heap::SwapStacks(Thread* self) {
2022  if (kUseThreadLocalAllocationStack) {
2023    live_stack_->AssertAllZero();
2024  }
2025  allocation_stack_.swap(live_stack_);
2026}
2027
2028void Heap::RevokeAllThreadLocalAllocationStacks(Thread* self) {
2029  if (!Runtime::Current()->IsStarted()) {
2030    // There's no thread list if the runtime hasn't started (eg
2031    // dex2oat or a test). Just revoke for self.
2032    self->RevokeThreadLocalAllocationStack();
2033    return;
2034  }
2035  // This must be called only during the pause.
2036  CHECK(Locks::mutator_lock_->IsExclusiveHeld(self));
2037  MutexLock mu(self, *Locks::runtime_shutdown_lock_);
2038  MutexLock mu2(self, *Locks::thread_list_lock_);
2039  std::list<Thread*> thread_list = Runtime::Current()->GetThreadList()->GetList();
2040  for (Thread* t : thread_list) {
2041    t->RevokeThreadLocalAllocationStack();
2042  }
2043}
2044
2045accounting::ModUnionTable* Heap::FindModUnionTableFromSpace(space::Space* space) {
2046  auto it = mod_union_tables_.find(space);
2047  if (it == mod_union_tables_.end()) {
2048    return nullptr;
2049  }
2050  return it->second;
2051}
2052
2053void Heap::ProcessCards(TimingLogger& timings) {
2054  // Clear cards and keep track of cards cleared in the mod-union table.
2055  for (const auto& space : continuous_spaces_) {
2056    accounting::ModUnionTable* table = FindModUnionTableFromSpace(space);
2057    if (table != nullptr) {
2058      const char* name = space->IsZygoteSpace() ? "ZygoteModUnionClearCards" :
2059          "ImageModUnionClearCards";
2060      TimingLogger::ScopedSplit split(name, &timings);
2061      table->ClearCards();
2062    } else if (space->GetType() != space::kSpaceTypeBumpPointerSpace) {
2063      TimingLogger::ScopedSplit split("AllocSpaceClearCards", &timings);
2064      // No mod union table for the AllocSpace. Age the cards so that the GC knows that these cards
2065      // were dirty before the GC started.
2066      // TODO: Don't need to use atomic.
2067      // The races are we either end up with: Aged card, unaged card. Since we have the checkpoint
2068      // roots and then we scan / update mod union tables after. We will always scan either card.
2069      // If we end up with the non aged card, we scan it it in the pause.
2070      card_table_->ModifyCardsAtomic(space->Begin(), space->End(), AgeCardVisitor(), VoidFunctor());
2071    }
2072  }
2073}
2074
2075static mirror::Object* IdentityRootCallback(mirror::Object* obj, void*, uint32_t, RootType) {
2076  return obj;
2077}
2078
2079void Heap::PreGcVerification(collector::GarbageCollector* gc) {
2080  ThreadList* thread_list = Runtime::Current()->GetThreadList();
2081  Thread* self = Thread::Current();
2082
2083  if (verify_pre_gc_heap_) {
2084    thread_list->SuspendAll();
2085    {
2086      ReaderMutexLock mu(self, *Locks::heap_bitmap_lock_);
2087      if (!VerifyHeapReferences()) {
2088        LOG(FATAL) << "Pre " << gc->GetName() << " heap verification failed";
2089      }
2090    }
2091    thread_list->ResumeAll();
2092  }
2093
2094  // Check that all objects which reference things in the live stack are on dirty cards.
2095  if (verify_missing_card_marks_) {
2096    thread_list->SuspendAll();
2097    {
2098      ReaderMutexLock mu(self, *Locks::heap_bitmap_lock_);
2099      SwapStacks(self);
2100      // Sort the live stack so that we can quickly binary search it later.
2101      if (!VerifyMissingCardMarks()) {
2102        LOG(FATAL) << "Pre " << gc->GetName() << " missing card mark verification failed";
2103      }
2104      SwapStacks(self);
2105    }
2106    thread_list->ResumeAll();
2107  }
2108
2109  if (verify_mod_union_table_) {
2110    thread_list->SuspendAll();
2111    ReaderMutexLock reader_lock(self, *Locks::heap_bitmap_lock_);
2112    for (const auto& table_pair : mod_union_tables_) {
2113      accounting::ModUnionTable* mod_union_table = table_pair.second;
2114      mod_union_table->UpdateAndMarkReferences(IdentityRootCallback, nullptr);
2115      mod_union_table->Verify();
2116    }
2117    thread_list->ResumeAll();
2118  }
2119}
2120
2121void Heap::PreSweepingGcVerification(collector::GarbageCollector* gc) {
2122  // Called before sweeping occurs since we want to make sure we are not going so reclaim any
2123  // reachable objects.
2124  if (verify_post_gc_heap_) {
2125    Thread* self = Thread::Current();
2126    CHECK_NE(self->GetState(), kRunnable);
2127    {
2128      WriterMutexLock mu(self, *Locks::heap_bitmap_lock_);
2129      // Swapping bound bitmaps does nothing.
2130      gc->SwapBitmaps();
2131      if (!VerifyHeapReferences()) {
2132        LOG(FATAL) << "Pre sweeping " << gc->GetName() << " GC verification failed";
2133      }
2134      gc->SwapBitmaps();
2135    }
2136  }
2137}
2138
2139void Heap::PostGcVerification(collector::GarbageCollector* gc) {
2140  if (verify_system_weaks_) {
2141    Thread* self = Thread::Current();
2142    ReaderMutexLock mu(self, *Locks::heap_bitmap_lock_);
2143    collector::MarkSweep* mark_sweep = down_cast<collector::MarkSweep*>(gc);
2144    mark_sweep->VerifySystemWeaks();
2145  }
2146}
2147
2148void Heap::PreGcRosAllocVerification(TimingLogger* timings) {
2149  if (verify_pre_gc_rosalloc_) {
2150    TimingLogger::ScopedSplit split("PreGcRosAllocVerification", timings);
2151    for (const auto& space : continuous_spaces_) {
2152      if (space->IsRosAllocSpace()) {
2153        VLOG(heap) << "PreGcRosAllocVerification : " << space->GetName();
2154        space::RosAllocSpace* rosalloc_space = space->AsRosAllocSpace();
2155        rosalloc_space->Verify();
2156      }
2157    }
2158  }
2159}
2160
2161void Heap::PostGcRosAllocVerification(TimingLogger* timings) {
2162  if (verify_post_gc_rosalloc_) {
2163    TimingLogger::ScopedSplit split("PostGcRosAllocVerification", timings);
2164    for (const auto& space : continuous_spaces_) {
2165      if (space->IsRosAllocSpace()) {
2166        VLOG(heap) << "PostGcRosAllocVerification : " << space->GetName();
2167        space::RosAllocSpace* rosalloc_space = space->AsRosAllocSpace();
2168        rosalloc_space->Verify();
2169      }
2170    }
2171  }
2172}
2173
2174collector::GcType Heap::WaitForGcToComplete(Thread* self) {
2175  ScopedThreadStateChange tsc(self, kWaitingForGcToComplete);
2176  MutexLock mu(self, *gc_complete_lock_);
2177  return WaitForGcToCompleteLocked(self);
2178}
2179
2180collector::GcType Heap::WaitForGcToCompleteLocked(Thread* self) {
2181  collector::GcType last_gc_type = collector::kGcTypeNone;
2182  uint64_t wait_start = NanoTime();
2183  while (collector_type_running_ != kCollectorTypeNone) {
2184    ATRACE_BEGIN("GC: Wait For Completion");
2185    // We must wait, change thread state then sleep on gc_complete_cond_;
2186    gc_complete_cond_->Wait(self);
2187    last_gc_type = last_gc_type_;
2188    ATRACE_END();
2189  }
2190  uint64_t wait_time = NanoTime() - wait_start;
2191  total_wait_time_ += wait_time;
2192  if (wait_time > long_pause_log_threshold_) {
2193    LOG(INFO) << "WaitForGcToComplete blocked for " << PrettyDuration(wait_time);
2194  }
2195  return last_gc_type;
2196}
2197
2198void Heap::DumpForSigQuit(std::ostream& os) {
2199  os << "Heap: " << GetPercentFree() << "% free, " << PrettySize(GetBytesAllocated()) << "/"
2200     << PrettySize(GetTotalMemory()) << "; " << GetObjectsAllocated() << " objects\n";
2201  DumpGcPerformanceInfo(os);
2202}
2203
2204size_t Heap::GetPercentFree() {
2205  return static_cast<size_t>(100.0f * static_cast<float>(GetFreeMemory()) / GetTotalMemory());
2206}
2207
2208void Heap::SetIdealFootprint(size_t max_allowed_footprint) {
2209  if (max_allowed_footprint > GetMaxMemory()) {
2210    VLOG(gc) << "Clamp target GC heap from " << PrettySize(max_allowed_footprint) << " to "
2211             << PrettySize(GetMaxMemory());
2212    max_allowed_footprint = GetMaxMemory();
2213  }
2214  max_allowed_footprint_ = max_allowed_footprint;
2215}
2216
2217bool Heap::IsMovableObject(const mirror::Object* obj) const {
2218  if (kMovingCollector) {
2219    DCHECK(!IsInTempSpace(obj));
2220    if (bump_pointer_space_->HasAddress(obj)) {
2221      return true;
2222    }
2223    // TODO: Refactor this logic into the space itself?
2224    // Objects in the main space are only copied during background -> foreground transitions or
2225    // visa versa.
2226    if (main_space_ != nullptr && main_space_->HasAddress(obj) &&
2227        (IsCompactingGC(background_collector_type_) ||
2228            IsCompactingGC(post_zygote_collector_type_))) {
2229      return true;
2230    }
2231  }
2232  return false;
2233}
2234
2235bool Heap::IsInTempSpace(const mirror::Object* obj) const {
2236  if (temp_space_->HasAddress(obj) && !temp_space_->Contains(obj)) {
2237    return true;
2238  }
2239  return false;
2240}
2241
2242void Heap::UpdateMaxNativeFootprint() {
2243  size_t native_size = native_bytes_allocated_;
2244  // TODO: Tune the native heap utilization to be a value other than the java heap utilization.
2245  size_t target_size = native_size / GetTargetHeapUtilization();
2246  if (target_size > native_size + max_free_) {
2247    target_size = native_size + max_free_;
2248  } else if (target_size < native_size + min_free_) {
2249    target_size = native_size + min_free_;
2250  }
2251  native_footprint_gc_watermark_ = target_size;
2252  native_footprint_limit_ = 2 * target_size - native_size;
2253}
2254
2255void Heap::GrowForUtilization(collector::GcType gc_type, uint64_t gc_duration) {
2256  // We know what our utilization is at this moment.
2257  // This doesn't actually resize any memory. It just lets the heap grow more when necessary.
2258  const size_t bytes_allocated = GetBytesAllocated();
2259  last_gc_size_ = bytes_allocated;
2260  last_gc_time_ns_ = NanoTime();
2261  size_t target_size;
2262  if (gc_type != collector::kGcTypeSticky) {
2263    // Grow the heap for non sticky GC.
2264    target_size = bytes_allocated / GetTargetHeapUtilization();
2265    if (target_size > bytes_allocated + max_free_) {
2266      target_size = bytes_allocated + max_free_;
2267    } else if (target_size < bytes_allocated + min_free_) {
2268      target_size = bytes_allocated + min_free_;
2269    }
2270    native_need_to_run_finalization_ = true;
2271    next_gc_type_ = collector::kGcTypeSticky;
2272  } else {
2273    // Based on how close the current heap size is to the target size, decide
2274    // whether or not to do a partial or sticky GC next.
2275    if (bytes_allocated + min_free_ <= max_allowed_footprint_) {
2276      next_gc_type_ = collector::kGcTypeSticky;
2277    } else {
2278      next_gc_type_ = have_zygote_space_ ? collector::kGcTypePartial : collector::kGcTypeFull;
2279    }
2280    // If we have freed enough memory, shrink the heap back down.
2281    if (bytes_allocated + max_free_ < max_allowed_footprint_) {
2282      target_size = bytes_allocated + max_free_;
2283    } else {
2284      target_size = std::max(bytes_allocated, max_allowed_footprint_);
2285    }
2286  }
2287  if (!ignore_max_footprint_) {
2288    SetIdealFootprint(target_size);
2289    if (concurrent_gc_) {
2290      // Calculate when to perform the next ConcurrentGC.
2291      // Calculate the estimated GC duration.
2292      const double gc_duration_seconds = NsToMs(gc_duration) / 1000.0;
2293      // Estimate how many remaining bytes we will have when we need to start the next GC.
2294      size_t remaining_bytes = allocation_rate_ * gc_duration_seconds;
2295      remaining_bytes = std::min(remaining_bytes, kMaxConcurrentRemainingBytes);
2296      remaining_bytes = std::max(remaining_bytes, kMinConcurrentRemainingBytes);
2297      if (UNLIKELY(remaining_bytes > max_allowed_footprint_)) {
2298        // A never going to happen situation that from the estimated allocation rate we will exceed
2299        // the applications entire footprint with the given estimated allocation rate. Schedule
2300        // another GC nearly straight away.
2301        remaining_bytes = kMinConcurrentRemainingBytes;
2302      }
2303      DCHECK_LE(remaining_bytes, max_allowed_footprint_);
2304      DCHECK_LE(max_allowed_footprint_, growth_limit_);
2305      // Start a concurrent GC when we get close to the estimated remaining bytes. When the
2306      // allocation rate is very high, remaining_bytes could tell us that we should start a GC
2307      // right away.
2308      concurrent_start_bytes_ = std::max(max_allowed_footprint_ - remaining_bytes, bytes_allocated);
2309    }
2310  }
2311}
2312
2313void Heap::ClearGrowthLimit() {
2314  growth_limit_ = capacity_;
2315  non_moving_space_->ClearGrowthLimit();
2316}
2317
2318void Heap::SetReferenceOffsets(MemberOffset reference_referent_offset,
2319                               MemberOffset reference_queue_offset,
2320                               MemberOffset reference_queueNext_offset,
2321                               MemberOffset reference_pendingNext_offset,
2322                               MemberOffset finalizer_reference_zombie_offset) {
2323  reference_referent_offset_ = reference_referent_offset;
2324  reference_queue_offset_ = reference_queue_offset;
2325  reference_queueNext_offset_ = reference_queueNext_offset;
2326  reference_pendingNext_offset_ = reference_pendingNext_offset;
2327  finalizer_reference_zombie_offset_ = finalizer_reference_zombie_offset;
2328  CHECK_NE(reference_referent_offset_.Uint32Value(), 0U);
2329  CHECK_NE(reference_queue_offset_.Uint32Value(), 0U);
2330  CHECK_NE(reference_queueNext_offset_.Uint32Value(), 0U);
2331  CHECK_NE(reference_pendingNext_offset_.Uint32Value(), 0U);
2332  CHECK_NE(finalizer_reference_zombie_offset_.Uint32Value(), 0U);
2333}
2334
2335void Heap::SetReferenceReferent(mirror::Object* reference, mirror::Object* referent) {
2336  DCHECK(reference != NULL);
2337  DCHECK_NE(reference_referent_offset_.Uint32Value(), 0U);
2338  reference->SetFieldObject(reference_referent_offset_, referent, true);
2339}
2340
2341mirror::Object* Heap::GetReferenceReferent(mirror::Object* reference) {
2342  DCHECK(reference != NULL);
2343  DCHECK_NE(reference_referent_offset_.Uint32Value(), 0U);
2344  return reference->GetFieldObject<mirror::Object>(reference_referent_offset_, true);
2345}
2346
2347void Heap::AddFinalizerReference(Thread* self, mirror::Object* object) {
2348  ScopedObjectAccess soa(self);
2349  JValue result;
2350  ArgArray arg_array("VL", 2);
2351  arg_array.Append(object);
2352  soa.DecodeMethod(WellKnownClasses::java_lang_ref_FinalizerReference_add)->Invoke(self,
2353      arg_array.GetArray(), arg_array.GetNumBytes(), &result, "VL");
2354}
2355
2356void Heap::EnqueueClearedReferences() {
2357  Thread* self = Thread::Current();
2358  Locks::mutator_lock_->AssertNotHeld(self);
2359  if (!cleared_references_.IsEmpty()) {
2360    // When a runtime isn't started there are no reference queues to care about so ignore.
2361    if (LIKELY(Runtime::Current()->IsStarted())) {
2362      ScopedObjectAccess soa(self);
2363      JValue result;
2364      ArgArray arg_array("VL", 2);
2365      arg_array.Append(cleared_references_.GetList());
2366      soa.DecodeMethod(WellKnownClasses::java_lang_ref_ReferenceQueue_add)->Invoke(soa.Self(),
2367          arg_array.GetArray(), arg_array.GetNumBytes(), &result, "VL");
2368    }
2369    cleared_references_.Clear();
2370  }
2371}
2372
2373void Heap::RequestConcurrentGC(Thread* self) {
2374  // Make sure that we can do a concurrent GC.
2375  Runtime* runtime = Runtime::Current();
2376  if (runtime == NULL || !runtime->IsFinishedStarting() || runtime->IsShuttingDown(self) ||
2377      self->IsHandlingStackOverflow()) {
2378    return;
2379  }
2380  // We already have a request pending, no reason to start more until we update
2381  // concurrent_start_bytes_.
2382  concurrent_start_bytes_ = std::numeric_limits<size_t>::max();
2383  JNIEnv* env = self->GetJniEnv();
2384  DCHECK(WellKnownClasses::java_lang_Daemons != nullptr);
2385  DCHECK(WellKnownClasses::java_lang_Daemons_requestGC != nullptr);
2386  env->CallStaticVoidMethod(WellKnownClasses::java_lang_Daemons,
2387                            WellKnownClasses::java_lang_Daemons_requestGC);
2388  CHECK(!env->ExceptionCheck());
2389}
2390
2391void Heap::ConcurrentGC(Thread* self) {
2392  if (Runtime::Current()->IsShuttingDown(self)) {
2393    return;
2394  }
2395  // Wait for any GCs currently running to finish.
2396  if (WaitForGcToComplete(self) == collector::kGcTypeNone) {
2397    // If the we can't run the GC type we wanted to run, find the next appropriate one and try that
2398    // instead. E.g. can't do partial, so do full instead.
2399    if (CollectGarbageInternal(next_gc_type_, kGcCauseBackground, false) ==
2400        collector::kGcTypeNone) {
2401      for (collector::GcType gc_type : gc_plan_) {
2402        // Attempt to run the collector, if we succeed, we are done.
2403        if (gc_type > next_gc_type_ &&
2404            CollectGarbageInternal(gc_type, kGcCauseBackground, false) != collector::kGcTypeNone) {
2405          break;
2406        }
2407      }
2408    }
2409  }
2410}
2411
2412void Heap::RequestHeapTrim() {
2413  // GC completed and now we must decide whether to request a heap trim (advising pages back to the
2414  // kernel) or not. Issuing a request will also cause trimming of the libc heap. As a trim scans
2415  // a space it will hold its lock and can become a cause of jank.
2416  // Note, the large object space self trims and the Zygote space was trimmed and unchanging since
2417  // forking.
2418
2419  // We don't have a good measure of how worthwhile a trim might be. We can't use the live bitmap
2420  // because that only marks object heads, so a large array looks like lots of empty space. We
2421  // don't just call dlmalloc all the time, because the cost of an _attempted_ trim is proportional
2422  // to utilization (which is probably inversely proportional to how much benefit we can expect).
2423  // We could try mincore(2) but that's only a measure of how many pages we haven't given away,
2424  // not how much use we're making of those pages.
2425  uint64_t ms_time = MilliTime();
2426  // Don't bother trimming the alloc space if a heap trim occurred in the last two seconds.
2427  if (ms_time - last_trim_time_ms_ < 2 * 1000) {
2428    return;
2429  }
2430
2431  Thread* self = Thread::Current();
2432  Runtime* runtime = Runtime::Current();
2433  if (runtime == nullptr || !runtime->IsFinishedStarting() || runtime->IsShuttingDown(self)) {
2434    // Heap trimming isn't supported without a Java runtime or Daemons (such as at dex2oat time)
2435    // Also: we do not wish to start a heap trim if the runtime is shutting down (a racy check
2436    // as we don't hold the lock while requesting the trim).
2437    return;
2438  }
2439
2440  last_trim_time_ms_ = ms_time;
2441
2442  // Trim only if we do not currently care about pause times.
2443  if (!CareAboutPauseTimes()) {
2444    JNIEnv* env = self->GetJniEnv();
2445    DCHECK(WellKnownClasses::java_lang_Daemons != NULL);
2446    DCHECK(WellKnownClasses::java_lang_Daemons_requestHeapTrim != NULL);
2447    env->CallStaticVoidMethod(WellKnownClasses::java_lang_Daemons,
2448                              WellKnownClasses::java_lang_Daemons_requestHeapTrim);
2449    CHECK(!env->ExceptionCheck());
2450  }
2451}
2452
2453void Heap::RevokeThreadLocalBuffers(Thread* thread) {
2454  if (rosalloc_space_ != nullptr) {
2455    rosalloc_space_->RevokeThreadLocalBuffers(thread);
2456  }
2457  if (bump_pointer_space_ != nullptr) {
2458    bump_pointer_space_->RevokeThreadLocalBuffers(thread);
2459  }
2460}
2461
2462void Heap::RevokeAllThreadLocalBuffers() {
2463  if (rosalloc_space_ != nullptr) {
2464    rosalloc_space_->RevokeAllThreadLocalBuffers();
2465  }
2466  if (bump_pointer_space_ != nullptr) {
2467    bump_pointer_space_->RevokeAllThreadLocalBuffers();
2468  }
2469}
2470
2471bool Heap::IsGCRequestPending() const {
2472  return concurrent_start_bytes_ != std::numeric_limits<size_t>::max();
2473}
2474
2475void Heap::RunFinalization(JNIEnv* env) {
2476  // Can't do this in WellKnownClasses::Init since System is not properly set up at that point.
2477  if (WellKnownClasses::java_lang_System_runFinalization == nullptr) {
2478    CHECK(WellKnownClasses::java_lang_System != nullptr);
2479    WellKnownClasses::java_lang_System_runFinalization =
2480        CacheMethod(env, WellKnownClasses::java_lang_System, true, "runFinalization", "()V");
2481    CHECK(WellKnownClasses::java_lang_System_runFinalization != nullptr);
2482  }
2483  env->CallStaticVoidMethod(WellKnownClasses::java_lang_System,
2484                            WellKnownClasses::java_lang_System_runFinalization);
2485}
2486
2487void Heap::RegisterNativeAllocation(JNIEnv* env, int bytes) {
2488  Thread* self = ThreadForEnv(env);
2489  if (native_need_to_run_finalization_) {
2490    RunFinalization(env);
2491    UpdateMaxNativeFootprint();
2492    native_need_to_run_finalization_ = false;
2493  }
2494  // Total number of native bytes allocated.
2495  native_bytes_allocated_.FetchAndAdd(bytes);
2496  if (static_cast<size_t>(native_bytes_allocated_) > native_footprint_gc_watermark_) {
2497    collector::GcType gc_type = have_zygote_space_ ? collector::kGcTypePartial :
2498        collector::kGcTypeFull;
2499
2500    // The second watermark is higher than the gc watermark. If you hit this it means you are
2501    // allocating native objects faster than the GC can keep up with.
2502    if (static_cast<size_t>(native_bytes_allocated_) > native_footprint_limit_) {
2503      if (WaitForGcToComplete(self) != collector::kGcTypeNone) {
2504        // Just finished a GC, attempt to run finalizers.
2505        RunFinalization(env);
2506        CHECK(!env->ExceptionCheck());
2507      }
2508      // If we still are over the watermark, attempt a GC for alloc and run finalizers.
2509      if (static_cast<size_t>(native_bytes_allocated_) > native_footprint_limit_) {
2510        CollectGarbageInternal(gc_type, kGcCauseForNativeAlloc, false);
2511        RunFinalization(env);
2512        native_need_to_run_finalization_ = false;
2513        CHECK(!env->ExceptionCheck());
2514      }
2515      // We have just run finalizers, update the native watermark since it is very likely that
2516      // finalizers released native managed allocations.
2517      UpdateMaxNativeFootprint();
2518    } else if (!IsGCRequestPending()) {
2519      if (concurrent_gc_) {
2520        RequestConcurrentGC(self);
2521      } else {
2522        CollectGarbageInternal(gc_type, kGcCauseForAlloc, false);
2523      }
2524    }
2525  }
2526}
2527
2528void Heap::RegisterNativeFree(JNIEnv* env, int bytes) {
2529  int expected_size, new_size;
2530  do {
2531    expected_size = native_bytes_allocated_.Load();
2532    new_size = expected_size - bytes;
2533    if (UNLIKELY(new_size < 0)) {
2534      ScopedObjectAccess soa(env);
2535      env->ThrowNew(WellKnownClasses::java_lang_RuntimeException,
2536                    StringPrintf("Attempted to free %d native bytes with only %d native bytes "
2537                                 "registered as allocated", bytes, expected_size).c_str());
2538      break;
2539    }
2540  } while (!native_bytes_allocated_.CompareAndSwap(expected_size, new_size));
2541}
2542
2543size_t Heap::GetTotalMemory() const {
2544  size_t ret = 0;
2545  for (const auto& space : continuous_spaces_) {
2546    // Currently don't include the image space.
2547    if (!space->IsImageSpace()) {
2548      ret += space->Size();
2549    }
2550  }
2551  for (const auto& space : discontinuous_spaces_) {
2552    if (space->IsLargeObjectSpace()) {
2553      ret += space->AsLargeObjectSpace()->GetBytesAllocated();
2554    }
2555  }
2556  return ret;
2557}
2558
2559void Heap::AddModUnionTable(accounting::ModUnionTable* mod_union_table) {
2560  DCHECK(mod_union_table != nullptr);
2561  mod_union_tables_.Put(mod_union_table->GetSpace(), mod_union_table);
2562}
2563
2564}  // namespace gc
2565}  // namespace art
2566