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

Unified Diff: src/heap/spaces.cc

Issue 2229403003: Revert of [heap] Switch to 500k pages (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 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/spaces.h ('k') | src/objects.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/spaces.cc
diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc
index 7b8a2f2f05a69906c4cf5796659009bb02aa61d8..b31aaf3998fd98a370b3a329dcfb992c12f9e112 100644
--- a/src/heap/spaces.cc
+++ b/src/heap/spaces.cc
@@ -595,21 +595,6 @@
set_next_chunk(NULL);
}
-void MemoryAllocator::ShrinkChunk(MemoryChunk* chunk, size_t bytes_to_shrink) {
- DCHECK_GE(bytes_to_shrink, static_cast<size_t>(base::OS::CommitPageSize()));
- DCHECK_EQ(0, bytes_to_shrink % base::OS::CommitPageSize());
- Address free_start = chunk->area_end_ - bytes_to_shrink;
- // Don't adjust the size of the page. The area is just uncomitted but not
- // released.
- chunk->area_end_ -= bytes_to_shrink;
- UncommitBlock(free_start, bytes_to_shrink);
- if (chunk->IsFlagSet(MemoryChunk::IS_EXECUTABLE)) {
- if (chunk->reservation_.IsReserved())
- chunk->reservation_.Guard(chunk->area_end_);
- else
- base::OS::Guard(chunk->area_end_, base::OS::CommitPageSize());
- }
-}
MemoryChunk* MemoryAllocator::AllocateChunk(intptr_t reserve_area_size,
intptr_t commit_area_size,
@@ -1228,50 +1213,17 @@
return Smi::FromInt(0);
}
-void PagedSpace::ShrinkPagesToHighWaterMark() {
- MemoryChunk::UpdateHighWaterMark(allocation_info_.top());
- EmptyAllocationInfo();
- ResetFreeList();
-
- for (Page* page : *this) {
- // Only shrink immortal immovable pages after deserialization.
- if (!page->IsFlagSet(Page::NEVER_EVACUATE)) continue;
-
- // In order to shrink the page, we need to find the last filler. Since
- // a GC could've happened we need to manually traverse the page to find
- // any free space at the end.
- HeapObjectIterator it(page);
- HeapObject* filler = nullptr;
- for (HeapObject* obj = it.Next(); obj != nullptr; obj = it.Next()) {
- filler = HeapObject::FromAddress(obj->address() + obj->Size());
- }
- if (filler == nullptr || filler->address() == page->area_end()) continue;
- CHECK(filler->IsFiller());
- if (!filler->IsFreeSpace()) continue;
-
- size_t unused =
- RoundDown(static_cast<size_t>(page->area_end() - filler->address() -
- FreeSpace::kSize),
- base::OS::CommitPageSize());
- if (unused > 0) {
- heap()->CreateFillerObjectAt(
- filler->address(),
- static_cast<int>(page->area_end() - filler->address() - unused),
- ClearRecordedSlots::kNo);
- heap()->memory_allocator()->ShrinkChunk(page, unused);
- CHECK(filler->IsFiller());
- CHECK_EQ(filler->address() + filler->Size(), page->area_end());
- accounting_stats_.DecreaseCapacity(unused);
- AccountUncommitted(unused);
- }
- }
-}
-
bool PagedSpace::Expand() {
- const int size = AreaSize();
+ int size = AreaSize();
+ if (snapshotable() && !HasPages()) {
+ size = Snapshot::SizeOfFirstPage(heap()->isolate(), identity());
+ }
+
if (!heap()->CanExpandOldGeneration(size)) return false;
+
Page* p = heap()->memory_allocator()->AllocatePage(size, this, executable());
if (p == nullptr) return false;
+
AccountCommitted(static_cast<intptr_t>(p->size()));
// Pages created during bootstrapping may contain immortal immovable objects.
@@ -1352,6 +1304,7 @@
void PagedSpace::ReleasePage(Page* page) {
DCHECK_EQ(page->LiveBytes(), 0);
+ DCHECK_EQ(AreaSize(), page->area_size());
DCHECK_EQ(page->owner(), this);
free_list_.EvictFreeListItems(page);
@@ -1371,7 +1324,7 @@
heap()->memory_allocator()->Free<MemoryAllocator::kPreFreeAndQueue>(page);
DCHECK(Capacity() > 0);
- accounting_stats_.ShrinkSpace(page->area_size());
+ accounting_stats_.ShrinkSpace(AreaSize());
}
#ifdef DEBUG
« no previous file with comments | « src/heap/spaces.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698