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

Unified Diff: src/heap/heap.cc

Issue 1027463002: Revert "Merge old data and pointer space." (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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 fd17774de2294df78cf5ea1e73a952b9fa3d6813..1b0ab092f04da91374cb07f7d8b46da18aa75e49 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -84,7 +84,8 @@ Heap::Heap()
global_ic_age_(0),
scan_on_scavenge_pages_(0),
new_space_(this),
- old_space_(NULL),
+ old_pointer_space_(NULL),
+ old_data_space_(NULL),
code_space_(NULL),
map_space_(NULL),
cell_space_(NULL),
@@ -171,16 +172,17 @@ Heap::Heap()
intptr_t Heap::Capacity() {
if (!HasBeenSetUp()) return 0;
- return new_space_.Capacity() + old_space_->Capacity() +
- code_space_->Capacity() + map_space_->Capacity() +
- cell_space_->Capacity();
+ return new_space_.Capacity() + old_pointer_space_->Capacity() +
+ old_data_space_->Capacity() + code_space_->Capacity() +
+ map_space_->Capacity() + cell_space_->Capacity();
}
intptr_t Heap::CommittedOldGenerationMemory() {
if (!HasBeenSetUp()) return 0;
- return old_space_->CommittedMemory() + code_space_->CommittedMemory() +
+ return old_pointer_space_->CommittedMemory() +
+ old_data_space_->CommittedMemory() + code_space_->CommittedMemory() +
map_space_->CommittedMemory() + cell_space_->CommittedMemory() +
lo_space_->Size();
}
@@ -197,7 +199,8 @@ size_t Heap::CommittedPhysicalMemory() {
if (!HasBeenSetUp()) return 0;
return new_space_.CommittedPhysicalMemory() +
- old_space_->CommittedPhysicalMemory() +
+ old_pointer_space_->CommittedPhysicalMemory() +
+ old_data_space_->CommittedPhysicalMemory() +
code_space_->CommittedPhysicalMemory() +
map_space_->CommittedPhysicalMemory() +
cell_space_->CommittedPhysicalMemory() +
@@ -225,15 +228,16 @@ void Heap::UpdateMaximumCommitted() {
intptr_t Heap::Available() {
if (!HasBeenSetUp()) return 0;
- return new_space_.Available() + old_space_->Available() +
- code_space_->Available() + map_space_->Available() +
- cell_space_->Available();
+ return new_space_.Available() + old_pointer_space_->Available() +
+ old_data_space_->Available() + code_space_->Available() +
+ map_space_->Available() + cell_space_->Available();
}
bool Heap::HasBeenSetUp() {
- return old_space_ != NULL && code_space_ != NULL && map_space_ != NULL &&
- cell_space_ != NULL && lo_space_ != NULL;
+ return old_pointer_space_ != NULL && old_data_space_ != NULL &&
+ code_space_ != NULL && map_space_ != NULL && cell_space_ != NULL &&
+ lo_space_ != NULL;
}
@@ -336,13 +340,22 @@ void Heap::PrintShortHeapStatistics() {
", committed: %6" V8_PTR_PREFIX "d KB\n",
new_space_.Size() / KB, new_space_.Available() / KB,
new_space_.CommittedMemory() / KB);
- PrintPID("Old space, used: %6" V8_PTR_PREFIX
+ PrintPID("Old pointers, used: %6" V8_PTR_PREFIX
"d KB"
", available: %6" V8_PTR_PREFIX
"d KB"
", committed: %6" V8_PTR_PREFIX "d KB\n",
- old_space_->SizeOfObjects() / KB, old_space_->Available() / KB,
- old_space_->CommittedMemory() / KB);
+ old_pointer_space_->SizeOfObjects() / KB,
+ old_pointer_space_->Available() / KB,
+ old_pointer_space_->CommittedMemory() / KB);
+ PrintPID("Old data space, used: %6" V8_PTR_PREFIX
+ "d KB"
+ ", available: %6" V8_PTR_PREFIX
+ "d KB"
+ ", committed: %6" V8_PTR_PREFIX "d KB\n",
+ old_data_space_->SizeOfObjects() / KB,
+ old_data_space_->Available() / KB,
+ old_data_space_->CommittedMemory() / KB);
PrintPID("Code space, used: %6" V8_PTR_PREFIX
"d KB"
", available: %6" V8_PTR_PREFIX
@@ -638,8 +651,12 @@ void Heap::GarbageCollectionEpilogue() {
isolate_->counters()->heap_fraction_new_space()->AddSample(static_cast<int>(
(new_space()->CommittedMemory() * 100.0) / CommittedMemory()));
- isolate_->counters()->heap_fraction_old_space()->AddSample(static_cast<int>(
- (old_space()->CommittedMemory() * 100.0) / CommittedMemory()));
+ isolate_->counters()->heap_fraction_old_pointer_space()->AddSample(
+ static_cast<int>((old_pointer_space()->CommittedMemory() * 100.0) /
+ CommittedMemory()));
+ isolate_->counters()->heap_fraction_old_data_space()->AddSample(
+ static_cast<int>((old_data_space()->CommittedMemory() * 100.0) /
+ CommittedMemory()));
isolate_->counters()->heap_fraction_code_space()->AddSample(
static_cast<int>((code_space()->CommittedMemory() * 100.0) /
CommittedMemory()));
@@ -685,7 +702,8 @@ void Heap::GarbageCollectionEpilogue() {
UPDATE_FRAGMENTATION_FOR_SPACE(space)
UPDATE_COUNTERS_FOR_SPACE(new_space)
- UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(old_space)
+ UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(old_pointer_space)
+ UPDATE_COUNTERS_AND_FRAGMENTATION_FOR_SPACE(old_data_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)
@@ -762,7 +780,7 @@ void Heap::CollectAllGarbage(int flags, const char* gc_reason,
// not matter, so long as we do not specify NEW_SPACE, which would not
// cause a full GC.
mark_compact_collector_.SetFlags(flags);
- CollectGarbage(OLD_SPACE, gc_reason, gc_callback_flags);
+ CollectGarbage(OLD_POINTER_SPACE, gc_reason, gc_callback_flags);
mark_compact_collector_.SetFlags(kNoGCFlags);
}
@@ -1345,6 +1363,11 @@ static void VerifyNonPointerSpacePointers(Heap* heap) {
for (HeapObject* object = code_it.Next(); object != NULL;
object = code_it.Next())
object->Iterate(&v);
+
+ HeapObjectIterator data_it(heap->old_data_space());
+ for (HeapObject* object = data_it.Next(); object != NULL;
+ object = data_it.Next())
+ object->Iterate(&v);
}
#endif // VERIFY_HEAP
@@ -2126,7 +2149,13 @@ class ScavengingVisitor : public StaticVisitorBase {
}
AllocationResult allocation;
- allocation = heap->old_space()->AllocateRaw(allocation_size);
+ if (object_contents == DATA_OBJECT) {
+ DCHECK(heap->AllowedToBeMigrated(object, OLD_DATA_SPACE));
+ allocation = heap->old_data_space()->AllocateRaw(allocation_size);
+ } else {
+ DCHECK(heap->AllowedToBeMigrated(object, OLD_POINTER_SPACE));
+ allocation = heap->old_pointer_space()->AllocateRaw(allocation_size);
+ }
HeapObject* target = NULL; // Initialization to please compiler.
if (allocation.To(&target)) {
@@ -2542,14 +2571,14 @@ bool Heap::CreateInitialMaps() {
set_empty_fixed_array(FixedArray::cast(obj));
{
- AllocationResult allocation = Allocate(null_map(), OLD_SPACE);
+ AllocationResult allocation = Allocate(null_map(), OLD_POINTER_SPACE);
if (!allocation.To(&obj)) return false;
}
set_null_value(Oddball::cast(obj));
Oddball::cast(obj)->set_kind(Oddball::kNull);
{
- AllocationResult allocation = Allocate(undefined_map(), OLD_SPACE);
+ AllocationResult allocation = Allocate(undefined_map(), OLD_POINTER_SPACE);
if (!allocation.To(&obj)) return false;
}
set_undefined_value(Oddball::cast(obj));
@@ -2786,11 +2815,11 @@ AllocationResult Heap::AllocateHeapNumber(double value, MutableMode mode,
int size = HeapNumber::kSize;
STATIC_ASSERT(HeapNumber::kSize <= Page::kMaxRegularHeapObjectSize);
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure);
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
@@ -2821,7 +2850,8 @@ AllocationResult Heap::AllocatePropertyCell() {
STATIC_ASSERT(PropertyCell::kSize <= Page::kMaxRegularHeapObjectSize);
HeapObject* result;
- AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE);
+ AllocationResult allocation =
+ AllocateRaw(size, OLD_POINTER_SPACE, OLD_POINTER_SPACE);
if (!allocation.To(&result)) return allocation;
result->set_map_no_write_barrier(global_property_cell_map());
@@ -2838,7 +2868,8 @@ AllocationResult Heap::AllocateWeakCell(HeapObject* value) {
STATIC_ASSERT(WeakCell::kSize <= Page::kMaxRegularHeapObjectSize);
HeapObject* result = NULL;
{
- AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE);
+ AllocationResult allocation =
+ AllocateRaw(size, OLD_POINTER_SPACE, OLD_POINTER_SPACE);
if (!allocation.To(&result)) return allocation;
}
result->set_map_no_write_barrier(weak_cell_map());
@@ -3392,7 +3423,7 @@ AllocationResult Heap::AllocateForeign(Address address,
PretenureFlag pretenure) {
// Statically ensure that it is safe to allocate foreigns in paged spaces.
STATIC_ASSERT(Foreign::kSize <= Page::kMaxRegularHeapObjectSize);
- AllocationSpace space = (pretenure == TENURED) ? OLD_SPACE : NEW_SPACE;
+ AllocationSpace space = (pretenure == TENURED) ? OLD_DATA_SPACE : NEW_SPACE;
Foreign* result;
AllocationResult allocation = Allocate(foreign_map(), space);
if (!allocation.To(&result)) return allocation;
@@ -3406,10 +3437,10 @@ AllocationResult Heap::AllocateByteArray(int length, PretenureFlag pretenure) {
v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true);
}
int size = ByteArray::SizeFor(length);
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure);
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
@@ -3440,17 +3471,20 @@ void Heap::CreateFillerObjectAt(Address addr, int size) {
bool Heap::CanMoveObjectStart(HeapObject* object) {
Address address = object->address();
+ bool is_in_old_pointer_space = InOldPointerSpace(address);
+ bool is_in_old_data_space = InOldDataSpace(address);
if (lo_space()->Contains(object)) return false;
Page* page = Page::FromAddress(address);
// We can move the object start if:
- // (1) the object is not in old space,
+ // (1) the object is not in old pointer or old data space,
// (2) the page of the object was already swept,
// (3) the page was already concurrently swept. This case is an optimization
// for concurrent sweeping. The WasSwept predicate for concurrently swept
// pages is set after sweeping all pages.
- return !InOldSpace(address) || page->WasSwept() || page->SweepingCompleted();
+ return (!is_in_old_pointer_space && !is_in_old_data_space) ||
+ page->WasSwept() || page->SweepingCompleted();
}
@@ -3567,10 +3601,10 @@ AllocationResult Heap::AllocateExternalArray(int length,
void* external_pointer,
PretenureFlag pretenure) {
int size = ExternalArray::kAlignedSize;
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure);
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
@@ -3613,10 +3647,10 @@ AllocationResult Heap::AllocateFixedTypedArray(int length,
size += kPointerSize;
}
#endif
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure);
HeapObject* object;
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&object)) return allocation;
if (array_type == kExternalFloat64Array) {
@@ -3780,7 +3814,8 @@ AllocationResult Heap::Allocate(Map* map, AllocationSpace space,
DCHECK(map->instance_type() != MAP_TYPE);
// If allocation failures are disallowed, we may allocate in a different
// space when new space is full and the object is not a large object.
- AllocationSpace retry_space = (space != NEW_SPACE) ? space : OLD_SPACE;
+ AllocationSpace retry_space =
+ (space != NEW_SPACE) ? space : TargetSpaceId(map->instance_type());
int size = map->instance_size();
if (allocation_site != NULL) {
size += AllocationMemento::kSize;
@@ -3857,7 +3892,7 @@ AllocationResult Heap::AllocateJSObjectFromMap(
// Allocate the JSObject.
int size = map->instance_size();
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_POINTER_SPACE, pretenure);
JSObject* js_obj;
AllocationResult allocation = Allocate(map, space, allocation_site);
if (!allocation.To(&js_obj)) return allocation;
@@ -3908,7 +3943,7 @@ AllocationResult Heap::CopyJSObject(JSObject* source, AllocationSite* site) {
if (always_allocate()) {
{
AllocationResult allocation =
- AllocateRaw(object_size, NEW_SPACE, OLD_SPACE);
+ AllocateRaw(object_size, NEW_SPACE, OLD_POINTER_SPACE);
if (!allocation.To(&clone)) return allocation;
}
Address clone_address = clone->address();
@@ -4059,12 +4094,12 @@ AllocationResult Heap::AllocateInternalizedStringImpl(T t, int chars,
map = internalized_string_map();
size = SeqTwoByteString::SizeFor(chars);
}
- AllocationSpace space = SelectSpace(size, TENURED);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, TENURED);
// Allocate string.
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
@@ -4102,11 +4137,11 @@ AllocationResult Heap::AllocateRawOneByteString(int length,
DCHECK_GE(String::kMaxLength, length);
int size = SeqOneByteString::SizeFor(length);
DCHECK(size <= SeqOneByteString::kMaxSize);
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure);
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
@@ -4126,11 +4161,11 @@ AllocationResult Heap::AllocateRawTwoByteString(int length,
DCHECK_GE(String::kMaxLength, length);
int size = SeqTwoByteString::SizeFor(length);
DCHECK(size <= SeqTwoByteString::kMaxSize);
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure);
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
@@ -4147,7 +4182,8 @@ AllocationResult Heap::AllocateEmptyFixedArray() {
int size = FixedArray::SizeFor(0);
HeapObject* result;
{
- AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE);
+ AllocationResult allocation =
+ AllocateRaw(size, OLD_DATA_SPACE, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
// Initialize the object.
@@ -4269,9 +4305,9 @@ AllocationResult Heap::AllocateRawFixedArray(int length,
v8::internal::Heap::FatalProcessOutOfMemory("invalid array length", true);
}
int size = FixedArray::SizeFor(length);
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_POINTER_SPACE, pretenure);
- return AllocateRaw(size, space, OLD_SPACE);
+ return AllocateRaw(size, space, OLD_POINTER_SPACE);
}
@@ -4340,11 +4376,11 @@ AllocationResult Heap::AllocateRawFixedDoubleArray(int length,
#ifndef V8_HOST_ARCH_64_BIT
size += kPointerSize;
#endif
- AllocationSpace space = SelectSpace(size, pretenure);
+ AllocationSpace space = SelectSpace(size, OLD_DATA_SPACE, pretenure);
HeapObject* object;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_DATA_SPACE);
if (!allocation.To(&object)) return allocation;
}
@@ -4359,11 +4395,11 @@ AllocationResult Heap::AllocateConstantPoolArray(
#ifndef V8_HOST_ARCH_64_BIT
size += kPointerSize;
#endif
- AllocationSpace space = SelectSpace(size, TENURED);
+ AllocationSpace space = SelectSpace(size, OLD_POINTER_SPACE, TENURED);
HeapObject* object;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_POINTER_SPACE);
if (!allocation.To(&object)) return allocation;
}
object = EnsureDoubleAligned(this, object, size);
@@ -4385,11 +4421,11 @@ AllocationResult Heap::AllocateExtendedConstantPoolArray(
#ifndef V8_HOST_ARCH_64_BIT
size += kPointerSize;
#endif
- AllocationSpace space = SelectSpace(size, TENURED);
+ AllocationSpace space = SelectSpace(size, OLD_POINTER_SPACE, TENURED);
HeapObject* object;
{
- AllocationResult allocation = AllocateRaw(size, space, OLD_SPACE);
+ AllocationResult allocation = AllocateRaw(size, space, OLD_POINTER_SPACE);
if (!allocation.To(&object)) return allocation;
}
object = EnsureDoubleAligned(this, object, size);
@@ -4407,7 +4443,8 @@ AllocationResult Heap::AllocateEmptyConstantPoolArray() {
int size = ConstantPoolArray::SizeFor(small);
HeapObject* result = NULL;
{
- AllocationResult allocation = AllocateRaw(size, OLD_SPACE, OLD_SPACE);
+ AllocationResult allocation =
+ AllocateRaw(size, OLD_DATA_SPACE, OLD_DATA_SPACE);
if (!allocation.To(&result)) return allocation;
}
result->set_map_no_write_barrier(constant_pool_array_map());
@@ -4422,7 +4459,7 @@ AllocationResult Heap::AllocateSymbol() {
HeapObject* result = NULL;
AllocationResult allocation =
- AllocateRaw(Symbol::kSize, OLD_SPACE, OLD_SPACE);
+ AllocateRaw(Symbol::kSize, OLD_POINTER_SPACE, OLD_POINTER_SPACE);
if (!allocation.To(&result)) return allocation;
result->set_map_no_write_barrier(symbol_map());
@@ -4460,7 +4497,7 @@ AllocationResult Heap::AllocateStruct(InstanceType type) {
return exception();
}
int size = map->instance_size();
- AllocationSpace space = SelectSpace(size, TENURED);
+ AllocationSpace space = SelectSpace(size, OLD_POINTER_SPACE, TENURED);
Struct* result;
{
AllocationResult allocation = Allocate(map, space);
@@ -4725,8 +4762,10 @@ void Heap::ReportHeapStatistics(const char* title) {
isolate_->memory_allocator()->ReportStatistics();
PrintF("To space : ");
new_space_.ReportStatistics();
- PrintF("Old space : ");
- old_space_->ReportStatistics();
+ PrintF("Old pointer space : ");
+ old_pointer_space_->ReportStatistics();
+ PrintF("Old data space : ");
+ old_data_space_->ReportStatistics();
PrintF("Code space : ");
code_space_->ReportStatistics();
PrintF("Map space : ");
@@ -4746,9 +4785,11 @@ bool Heap::Contains(HeapObject* value) { return Contains(value->address()); }
bool Heap::Contains(Address addr) {
if (isolate_->memory_allocator()->IsOutsideAllocatedSpace(addr)) return false;
return HasBeenSetUp() &&
- (new_space_.ToSpaceContains(addr) || old_space_->Contains(addr) ||
- code_space_->Contains(addr) || map_space_->Contains(addr) ||
- cell_space_->Contains(addr) || lo_space_->SlowContains(addr));
+ (new_space_.ToSpaceContains(addr) ||
+ old_pointer_space_->Contains(addr) ||
+ old_data_space_->Contains(addr) || code_space_->Contains(addr) ||
+ map_space_->Contains(addr) || cell_space_->Contains(addr) ||
+ lo_space_->SlowContains(addr));
}
@@ -4764,8 +4805,10 @@ bool Heap::InSpace(Address addr, AllocationSpace space) {
switch (space) {
case NEW_SPACE:
return new_space_.ToSpaceContains(addr);
- case OLD_SPACE:
- return old_space_->Contains(addr);
+ case OLD_POINTER_SPACE:
+ return old_pointer_space_->Contains(addr);
+ case OLD_DATA_SPACE:
+ return old_data_space_->Contains(addr);
case CODE_SPACE:
return code_space_->Contains(addr);
case MAP_SPACE:
@@ -4813,10 +4856,11 @@ void Heap::Verify() {
new_space_.Verify();
- old_space_->Verify(&visitor);
+ old_pointer_space_->Verify(&visitor);
map_space_->Verify(&visitor);
VerifyPointersVisitor no_dirty_regions_visitor;
+ old_data_space_->Verify(&no_dirty_regions_visitor);
code_space_->Verify(&no_dirty_regions_visitor);
cell_space_->Verify(&no_dirty_regions_visitor);
@@ -5133,8 +5177,10 @@ void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
*stats->end_marker = HeapStats::kEndMarker;
*stats->new_space_size = new_space_.SizeAsInt();
*stats->new_space_capacity = static_cast<int>(new_space_.Capacity());
- *stats->old_space_size = old_space_->SizeOfObjects();
- *stats->old_space_capacity = old_space_->Capacity();
+ *stats->old_pointer_space_size = old_pointer_space_->SizeOfObjects();
+ *stats->old_pointer_space_capacity = old_pointer_space_->Capacity();
+ *stats->old_data_space_size = old_data_space_->SizeOfObjects();
+ *stats->old_data_space_capacity = old_data_space_->Capacity();
*stats->code_space_size = code_space_->SizeOfObjects();
*stats->code_space_capacity = code_space_->Capacity();
*stats->map_space_size = map_space_->SizeOfObjects();
@@ -5163,7 +5209,8 @@ void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
intptr_t Heap::PromotedSpaceSizeOfObjects() {
- return old_space_->SizeOfObjects() + code_space_->SizeOfObjects() +
+ return old_pointer_space_->SizeOfObjects() +
+ old_data_space_->SizeOfObjects() + code_space_->SizeOfObjects() +
map_space_->SizeOfObjects() + cell_space_->SizeOfObjects() +
lo_space_->SizeOfObjects();
}
@@ -5287,11 +5334,17 @@ bool Heap::SetUp() {
}
new_space_top_after_last_gc_ = new_space()->top();
- // Initialize old space.
- old_space_ =
- new OldSpace(this, max_old_generation_size_, OLD_SPACE, NOT_EXECUTABLE);
- if (old_space_ == NULL) return false;
- if (!old_space_->SetUp()) return false;
+ // Initialize old pointer space.
+ old_pointer_space_ = new OldSpace(this, max_old_generation_size_,
+ OLD_POINTER_SPACE, NOT_EXECUTABLE);
+ if (old_pointer_space_ == NULL) return false;
+ if (!old_pointer_space_->SetUp()) return false;
+
+ // Initialize old data space.
+ old_data_space_ = new OldSpace(this, max_old_generation_size_, OLD_DATA_SPACE,
+ NOT_EXECUTABLE);
+ if (old_data_space_ == NULL) return false;
+ if (!old_data_space_->SetUp()) return false;
if (!isolate_->code_range()->SetUp(code_range_size_)) return false;
@@ -5414,8 +5467,12 @@ void Heap::TearDown() {
MaximumCommittedMemory());
PrintF("maximum_committed_by_new_space=%" V8_PTR_PREFIX "d ",
new_space_.MaximumCommittedMemory());
- PrintF("maximum_committed_by_old_space=%" V8_PTR_PREFIX "d ",
- old_space_->MaximumCommittedMemory());
+ PrintF("maximum_committed_by_old_pointer_space=%" V8_PTR_PREFIX "d ",
+ old_data_space_->MaximumCommittedMemory());
+ PrintF("maximum_committed_by_old_data_space=%" V8_PTR_PREFIX "d ",
+ old_pointer_space_->MaximumCommittedMemory());
+ PrintF("maximum_committed_by_old_data_space=%" V8_PTR_PREFIX "d ",
+ old_pointer_space_->MaximumCommittedMemory());
PrintF("maximum_committed_by_code_space=%" V8_PTR_PREFIX "d ",
code_space_->MaximumCommittedMemory());
PrintF("maximum_committed_by_map_space=%" V8_PTR_PREFIX "d ",
@@ -5441,10 +5498,16 @@ void Heap::TearDown() {
new_space_.TearDown();
- if (old_space_ != NULL) {
- old_space_->TearDown();
- delete old_space_;
- old_space_ = NULL;
+ if (old_pointer_space_ != NULL) {
+ old_pointer_space_->TearDown();
+ delete old_pointer_space_;
+ old_pointer_space_ = NULL;
+ }
+
+ if (old_data_space_ != NULL) {
+ old_data_space_->TearDown();
+ delete old_data_space_;
+ old_data_space_ = NULL;
}
if (code_space_ != NULL) {
@@ -5580,8 +5643,10 @@ Space* AllSpaces::next() {
switch (counter_++) {
case NEW_SPACE:
return heap_->new_space();
- case OLD_SPACE:
- return heap_->old_space();
+ case OLD_POINTER_SPACE:
+ return heap_->old_pointer_space();
+ case OLD_DATA_SPACE:
+ return heap_->old_data_space();
case CODE_SPACE:
return heap_->code_space();
case MAP_SPACE:
@@ -5598,8 +5663,10 @@ Space* AllSpaces::next() {
PagedSpace* PagedSpaces::next() {
switch (counter_++) {
- case OLD_SPACE:
- return heap_->old_space();
+ case OLD_POINTER_SPACE:
+ return heap_->old_pointer_space();
+ case OLD_DATA_SPACE:
+ return heap_->old_data_space();
case CODE_SPACE:
return heap_->code_space();
case MAP_SPACE:
@@ -5614,8 +5681,10 @@ PagedSpace* PagedSpaces::next() {
OldSpace* OldSpaces::next() {
switch (counter_++) {
- case OLD_SPACE:
- return heap_->old_space();
+ case OLD_POINTER_SPACE:
+ return heap_->old_pointer_space();
+ case OLD_DATA_SPACE:
+ return heap_->old_data_space();
case CODE_SPACE:
return heap_->code_space();
default:
@@ -5674,8 +5743,12 @@ ObjectIterator* SpaceIterator::CreateIterator() {
case NEW_SPACE:
iterator_ = new SemiSpaceIterator(heap_->new_space(), size_func_);
break;
- case OLD_SPACE:
- iterator_ = new HeapObjectIterator(heap_->old_space(), size_func_);
+ case OLD_POINTER_SPACE:
+ iterator_ =
+ new HeapObjectIterator(heap_->old_pointer_space(), size_func_);
+ break;
+ case OLD_DATA_SPACE:
+ iterator_ = new HeapObjectIterator(heap_->old_data_space(), size_func_);
break;
case CODE_SPACE:
iterator_ = new HeapObjectIterator(heap_->code_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