Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(324)

Unified Diff: src/heap/heap.cc

Issue 1053243003: Revert of Merge cellspace into old pointer space (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/heap-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index 1462afc26cc2d30af8e5a2044f20259b699ae754..22eea2dcad75f40fe5af4d5717d55614ebd0ece3 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -87,6 +87,7 @@
old_space_(NULL),
code_space_(NULL),
map_space_(NULL),
+ cell_space_(NULL),
lo_space_(NULL),
gc_state_(NOT_IN_GC),
gc_post_processing_depth_(0),
@@ -171,7 +172,8 @@
if (!HasBeenSetUp()) return 0;
return new_space_.Capacity() + old_space_->Capacity() +
- code_space_->Capacity() + map_space_->Capacity();
+ code_space_->Capacity() + map_space_->Capacity() +
+ cell_space_->Capacity();
}
@@ -179,7 +181,8 @@
if (!HasBeenSetUp()) return 0;
return old_space_->CommittedMemory() + code_space_->CommittedMemory() +
- map_space_->CommittedMemory() + lo_space_->Size();
+ map_space_->CommittedMemory() + cell_space_->CommittedMemory() +
+ lo_space_->Size();
}
@@ -197,6 +200,7 @@
old_space_->CommittedPhysicalMemory() +
code_space_->CommittedPhysicalMemory() +
map_space_->CommittedPhysicalMemory() +
+ cell_space_->CommittedPhysicalMemory() +
lo_space_->CommittedPhysicalMemory();
}
@@ -222,13 +226,14 @@
if (!HasBeenSetUp()) return 0;
return new_space_.Available() + old_space_->Available() +
- code_space_->Available() + map_space_->Available();
+ code_space_->Available() + map_space_->Available() +
+ cell_space_->Available();
}
bool Heap::HasBeenSetUp() {
return old_space_ != NULL && code_space_ != NULL && map_space_ != NULL &&
- lo_space_ != NULL;
+ cell_space_ != NULL && lo_space_ != NULL;
}
@@ -352,6 +357,13 @@
", committed: %6" V8_PTR_PREFIX "d KB\n",
map_space_->SizeOfObjects() / KB, map_space_->Available() / KB,
map_space_->CommittedMemory() / KB);
+ PrintPID("Cell space, used: %6" V8_PTR_PREFIX
+ "d KB"
+ ", available: %6" V8_PTR_PREFIX
+ "d KB"
+ ", committed: %6" V8_PTR_PREFIX "d KB\n",
+ cell_space_->SizeOfObjects() / KB, cell_space_->Available() / KB,
+ cell_space_->CommittedMemory() / KB);
PrintPID("Large object space, used: %6" V8_PTR_PREFIX
"d KB"
", available: %6" V8_PTR_PREFIX
@@ -634,6 +646,9 @@
CommittedMemory()));
isolate_->counters()->heap_fraction_map_space()->AddSample(static_cast<int>(
(map_space()->CommittedMemory() * 100.0) / CommittedMemory()));
+ isolate_->counters()->heap_fraction_cell_space()->AddSample(
+ static_cast<int>((cell_space()->CommittedMemory() * 100.0) /
+ CommittedMemory()));
isolate_->counters()->heap_fraction_lo_space()->AddSample(static_cast<int>(
(lo_space()->CommittedMemory() * 100.0) / CommittedMemory()));
@@ -643,6 +658,8 @@
static_cast<int>(SizeOfObjects() / KB));
isolate_->counters()->heap_sample_map_space_committed()->AddSample(
static_cast<int>(map_space()->CommittedMemory() / KB));
+ isolate_->counters()->heap_sample_cell_space_committed()->AddSample(
+ static_cast<int>(cell_space()->CommittedMemory() / KB));
isolate_->counters()->heap_sample_code_space_committed()->AddSample(
static_cast<int>(code_space()->CommittedMemory() / KB));
@@ -672,6 +689,7 @@
UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(old_space)
UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(code_space)
UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(map_space)
+ UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(cell_space)
UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(lo_space)
#undef UPDATE_COUNTERS_FOR_SPACE
#undef UPDATE_FRAGMENTATION_FOR_SPACE
@@ -1536,6 +1554,18 @@
store_buffer()->IteratePointersToNewSpace(&ScavengeObject);
}
+ // Copy objects reachable from simple cells by scavenging cell values
+ // directly.
+ HeapObjectIterator cell_iterator(cell_space_);
+ for (HeapObject* heap_object = cell_iterator.Next(); heap_object != NULL;
+ heap_object = cell_iterator.Next()) {
+ if (heap_object->IsCell()) {
+ Cell* cell = Cell::cast(heap_object);
+ Address value_address = cell->ValueAddress();
+ scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(value_address));
+ }
+ }
+
// Copy objects reachable from the encountered weak collections list.
scavenge_visitor.VisitPointer(&encountered_weak_collections_);
// Copy objects reachable from the encountered weak cells.
@@ -2800,7 +2830,7 @@
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, CELL_SPACE, CELL_SPACE);
if (!allocation.To(&result)) return allocation;
}
result->set_map_no_write_barrier(cell_map());
@@ -4748,6 +4778,8 @@
code_space_->ReportStatistics();
PrintF("Map space : ");
map_space_->ReportStatistics();
+ PrintF("Cell space : ");
+ cell_space_->ReportStatistics();
PrintF("Large object space : ");
lo_space_->ReportStatistics();
PrintF(">>>>>> ========================================= >>>>>>\n");
@@ -4763,7 +4795,7 @@
return HasBeenSetUp() &&
(new_space_.ToSpaceContains(addr) || old_space_->Contains(addr) ||
code_space_->Contains(addr) || map_space_->Contains(addr) ||
- lo_space_->SlowContains(addr));
+ cell_space_->Contains(addr) || lo_space_->SlowContains(addr));
}
@@ -4785,6 +4817,8 @@
return code_space_->Contains(addr);
case MAP_SPACE:
return map_space_->Contains(addr);
+ case CELL_SPACE:
+ return cell_space_->Contains(addr);
case LO_SPACE:
return lo_space_->SlowContains(addr);
}
@@ -4831,6 +4865,7 @@
VerifyPointersVisitor no_dirty_regions_visitor;
code_space_->Verify(&no_dirty_regions_visitor);
+ cell_space_->Verify(&no_dirty_regions_visitor);
lo_space_->Verify();
}
@@ -5140,6 +5175,8 @@
*stats->code_space_capacity = code_space_->Capacity();
*stats->map_space_size = map_space_->SizeOfObjects();
*stats->map_space_capacity = map_space_->Capacity();
+ *stats->cell_space_size = cell_space_->SizeOfObjects();
+ *stats->cell_space_capacity = cell_space_->Capacity();
*stats->lo_space_size = lo_space_->Size();
isolate_->global_handles()->RecordStats(stats);
*stats->memory_allocator_size = isolate()->memory_allocator()->Size();
@@ -5163,7 +5200,8 @@
intptr_t Heap::PromotedSpaceSizeOfObjects() {
return old_space_->SizeOfObjects() + code_space_->SizeOfObjects() +
- map_space_->SizeOfObjects() + lo_space_->SizeOfObjects();
+ map_space_->SizeOfObjects() + cell_space_->SizeOfObjects() +
+ lo_space_->SizeOfObjects();
}
@@ -5305,6 +5343,11 @@
if (map_space_ == NULL) return false;
if (!map_space_->SetUp()) return false;
+ // Initialize simple cell space.
+ cell_space_ = new CellSpace(this, max_old_generation_size_, CELL_SPACE);
+ if (cell_space_ == NULL) return false;
+ if (!cell_space_->SetUp()) return false;
+
// The large object code space may contain code or data. We set the memory
// to be non-executable here for safety, but this means we need to enable it
// explicitly when allocating large code objects.
@@ -5413,6 +5456,8 @@
code_space_->MaximumCommittedMemory());
PrintF("maximum_committed_by_map_space=%" V8_PTR_PREFIX "d ",
map_space_->MaximumCommittedMemory());
+ PrintF("maximum_committed_by_cell_space=%" V8_PTR_PREFIX "d ",
+ cell_space_->MaximumCommittedMemory());
PrintF("maximum_committed_by_lo_space=%" V8_PTR_PREFIX "d ",
lo_space_->MaximumCommittedMemory());
PrintF("\n\n");
@@ -5448,6 +5493,12 @@
map_space_->TearDown();
delete map_space_;
map_space_ = NULL;
+ }
+
+ if (cell_space_ != NULL) {
+ cell_space_->TearDown();
+ delete cell_space_;
+ cell_space_ = NULL;
}
if (lo_space_ != NULL) {
@@ -5590,6 +5641,8 @@
return heap_->code_space();
case MAP_SPACE:
return heap_->map_space();
+ case CELL_SPACE:
+ return heap_->cell_space();
case LO_SPACE:
return heap_->lo_space();
default:
@@ -5606,6 +5659,8 @@
return heap_->code_space();
case MAP_SPACE:
return heap_->map_space();
+ case CELL_SPACE:
+ return heap_->cell_space();
default:
return NULL;
}
@@ -5682,6 +5737,9 @@
break;
case MAP_SPACE:
iterator_ = new HeapObjectIterator(heap_->map_space(), size_func_);
+ break;
+ case CELL_SPACE:
+ iterator_ = new HeapObjectIterator(heap_->cell_space(), size_func_);
break;
case LO_SPACE:
iterator_ = new LargeObjectIterator(heap_->lo_space(), size_func_);
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/heap-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698