summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2014-06-17 18:45:34 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-06-17 04:58:57 +0000
commitdd69b14f522d9cf8230e38c69bf3952a8073c02a (patch)
treeed0ae5ca571b3c6cd7131085c0ff22ab437f4853 /runtime
parentbfa45cdda3e65cefb61fdbe75e8f4c13087d4641 (diff)
parent96bcd45e8bd9ab5a50e005fdaf4448e2c53283ec (diff)
downloadart-dd69b14f522d9cf8230e38c69bf3952a8073c02a.zip
art-dd69b14f522d9cf8230e38c69bf3952a8073c02a.tar.gz
art-dd69b14f522d9cf8230e38c69bf3952a8073c02a.tar.bz2
Merge "Fix error with remembered sets creation."
Diffstat (limited to 'runtime')
-rw-r--r--runtime/gc/heap.cc22
1 files changed, 12 insertions, 10 deletions
diff --git a/runtime/gc/heap.cc b/runtime/gc/heap.cc
index ba7969e..5cde451 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);