diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-06-17 18:45:34 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-06-17 04:58:57 +0000 |
commit | dd69b14f522d9cf8230e38c69bf3952a8073c02a (patch) | |
tree | ed0ae5ca571b3c6cd7131085c0ff22ab437f4853 | |
parent | bfa45cdda3e65cefb61fdbe75e8f4c13087d4641 (diff) | |
parent | 96bcd45e8bd9ab5a50e005fdaf4448e2c53283ec (diff) | |
download | art-dd69b14f522d9cf8230e38c69bf3952a8073c02a.tar.gz art-dd69b14f522d9cf8230e38c69bf3952a8073c02a.tar.bz2 art-dd69b14f522d9cf8230e38c69bf3952a8073c02a.zip |
Merge "Fix error with remembered sets creation."
-rw-r--r-- | runtime/gc/heap.cc | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc index ba7969e402..5cde4515c9 100644 --- a/runtime/gc/heap.cc +++ b/runtime/gc/heap.cc @@ -285,17 +285,11 @@ Heap::Heap(size_t initial_size, size_t growth_limit, size_t min_free, size_t max CHECK(mod_union_table != nullptr) << "Failed to create image mod-union table"; AddModUnionTable(mod_union_table); - if (collector::SemiSpace::kUseRememberedSet) { + if (collector::SemiSpace::kUseRememberedSet && non_moving_space_ != main_space_) { accounting::RememberedSet* non_moving_space_rem_set = new accounting::RememberedSet("Non-moving space remembered set", this, non_moving_space_); CHECK(non_moving_space_rem_set != nullptr) << "Failed to create non-moving space remembered set"; AddRememberedSet(non_moving_space_rem_set); - if (main_space_ != nullptr && main_space_ != non_moving_space_) { - accounting::RememberedSet* main_space_rem_set = - new accounting::RememberedSet("Main space remembered set", this, main_space_); - CHECK(main_space_rem_set != nullptr) << "Failed to create main space remembered set"; - AddRememberedSet(main_space_rem_set); - } } // TODO: Count objects in the image space here. @@ -376,6 +370,9 @@ void Heap::CreateMainMallocSpace(MemMap* mem_map, size_t initial_size, size_t gr // that getting primitive array elements is faster. can_move_objects = !have_zygote_space_; } + if (collector::SemiSpace::kUseRememberedSet && main_space_ != nullptr) { + RemoveRememberedSet(main_space_); + } if (kUseRosAlloc) { rosalloc_space_ = space::RosAllocSpace::CreateFromMemMap( mem_map, "main rosalloc space", kDefaultStartingSize, initial_size, growth_limit, capacity, @@ -390,6 +387,12 @@ void Heap::CreateMainMallocSpace(MemMap* mem_map, size_t initial_size, size_t gr CHECK(main_space_ != nullptr) << "Failed to create dlmalloc space"; } main_space_->SetFootprintLimit(main_space_->Capacity()); + if (collector::SemiSpace::kUseRememberedSet) { + accounting::RememberedSet* main_space_rem_set = + new accounting::RememberedSet("Main space remembered set", this, main_space_); + CHECK(main_space_rem_set != nullptr) << "Failed to create main space remembered set"; + AddRememberedSet(main_space_rem_set); + } VLOG(heap) << "Created main space " << main_space_; } @@ -1386,7 +1389,6 @@ void Heap::TransitionCollector(CollectorType collector_type) { Compact(bump_pointer_space_, main_space_); // Remove the main space so that we don't try to trim it, this doens't work for debug // builds since RosAlloc attempts to read the magic number from a protected page. - // TODO: Clean this up by getting rid of the remove_as_default parameter. RemoveSpace(main_space_); } break; @@ -1617,9 +1619,9 @@ void Heap::PreZygoteFork() { madvise(main_space_->Begin(), main_space_->Capacity(), MADV_DONTNEED); MemMap* mem_map = main_space_->ReleaseMemMap(); RemoveSpace(main_space_); - delete main_space_; - main_space_ = nullptr; + space::Space* old_main_space = main_space_; CreateMainMallocSpace(mem_map, kDefaultInitialSize, mem_map->Size(), mem_map->Size()); + delete old_main_space; AddSpace(main_space_); } else { bump_pointer_space_->GetMemMap()->Protect(PROT_READ | PROT_WRITE); |