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

Unified Diff: src/heap/spaces.h

Issue 1380723002: [heap] Remove unswept bytes counter (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add separate accounting for committed memory Created 5 years, 2 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
Index: src/heap/spaces.h
diff --git a/src/heap/spaces.h b/src/heap/spaces.h
index 038cb1cc17a0f3645de3392ed4d557258acdfd4e..0720e9c30965e153c190bfe3e0ae5dd0217108f8 100644
--- a/src/heap/spaces.h
+++ b/src/heap/spaces.h
@@ -1454,8 +1454,9 @@ class AllocationStats BASE_EMBEDDED {
// Zero out all the allocation statistics (i.e., no capacity).
void Clear() {
capacity_ = 0;
- max_capacity_ = 0;
size_ = 0;
+ committed_ = 0;
+ max_committed_ = 0;
}
void ClearSize() { size_ = capacity_; }
@@ -1468,8 +1469,9 @@ class AllocationStats BASE_EMBEDDED {
// Accessors for the allocation statistics.
intptr_t Capacity() { return capacity_; }
- intptr_t MaxCapacity() { return max_capacity_; }
intptr_t Size() { return size_; }
+ intptr_t Committed() { return committed_; }
+ intptr_t MaxCommitted() { return max_committed_; }
// Grow the space by adding available bytes. They are initially marked as
// being in use (part of the size), but will normally be immediately freed,
@@ -1477,9 +1479,6 @@ class AllocationStats BASE_EMBEDDED {
void ExpandSpace(int size_in_bytes) {
capacity_ += size_in_bytes;
size_ += size_in_bytes;
- if (capacity_ > max_capacity_) {
- max_capacity_ = capacity_;
- }
DCHECK(size_ >= 0);
}
@@ -1501,35 +1500,56 @@ class AllocationStats BASE_EMBEDDED {
// Free allocated bytes, making them available (size -> available).
void DeallocateBytes(intptr_t size_in_bytes) {
size_ -= size_in_bytes;
- DCHECK(size_ >= 0);
+ DCHECK_GE(size_, 0);
}
// Merge {other} into {this}.
void Merge(const AllocationStats& other) {
capacity_ += other.capacity_;
size_ += other.size_;
- if (other.max_capacity_ > max_capacity_) {
- max_capacity_ = other.max_capacity_;
+ committed_ += other.committed_;
+ if (committed_ > max_committed_) {
+ max_committed_ = committed_;
}
}
void DecreaseCapacity(intptr_t size_in_bytes) {
capacity_ -= size_in_bytes;
DCHECK_GE(capacity_, 0);
+ DCHECK_GE(capacity_, size_);
}
void IncreaseCapacity(intptr_t size_in_bytes) { capacity_ += size_in_bytes; }
+ void CommitMemory(intptr_t size_in_bytes) {
+ DCHECK_GE(size_in_bytes, 0);
+ committed_ += size_in_bytes;
+ if (committed_ > max_committed_) {
+ max_committed_ = committed_;
+ }
+ }
+
+ void UncommitMemory(intptr_t size_in_bytes) {
+ DCHECK_GE(size_in_bytes, 0);
+ DCHECK_GE(committed_, size_in_bytes);
+ committed_ -= size_in_bytes;
+ }
+
private:
// |capacity_|: The number of object-area bytes (i.e., not including page
- // bookkeeping structures) currently in the space.
+ // bookkeeping structures) currently in the space.
intptr_t capacity_;
- // |max_capacity_|: The maximum capacity ever observed.
- intptr_t max_capacity_;
-
// |size_|: The number of allocated bytes.
intptr_t size_;
+
+ // |committed_|: The number of bytes committed in the corresponding space,
+ // including page headers. Note that committed memory does not need to
+ // be larger than capacity/size, as memory can be moved to other spaces.
+ intptr_t committed_;
+
+ // |max_committed_|: The maximum number of bytes committed ever observed.
+ intptr_t max_committed_;
};
@@ -1630,6 +1650,10 @@ class FreeList {
public:
explicit FreeList(PagedSpace* owner);
+ // The method concatenates {other} into {this} and returns the added bytes,
+ // including waste.
+ //
+ // Can be used concurrently.
intptr_t Concatenate(FreeList* other);
// Clear the free list.
@@ -1808,12 +1832,11 @@ class PagedSpace : public Space {
// Current capacity without growing (Size() + Available()).
intptr_t Capacity() { return accounting_stats_.Capacity(); }
- // Total amount of memory committed for this space. For paged
- // spaces this equals the capacity.
- intptr_t CommittedMemory() override { return Capacity(); }
+ // Total amount of memory committed for this space.
+ intptr_t CommittedMemory() override { return accounting_stats_.Committed(); }
// The maximum amount of memory ever committed for this space.
- intptr_t MaximumCommittedMemory() { return accounting_stats_.MaxCapacity(); }
+ intptr_t MaximumCommittedMemory() { return accounting_stats_.MaxCommitted(); }
// Approximate amount of physical memory committed for this space.
size_t CommittedPhysicalMemory() override;
@@ -1955,22 +1978,6 @@ class PagedSpace : public Space {
!p->IsFlagSet(Page::RESCAN_ON_EVACUATION) && !p->WasSwept();
}
- void IncrementUnsweptFreeBytes(intptr_t by) { unswept_free_bytes_ += by; }
-
- void IncreaseUnsweptFreeBytes(Page* p) {
- DCHECK(ShouldBeSweptBySweeperThreads(p));
- unswept_free_bytes_ += (p->area_size() - p->LiveBytes());
- }
-
- void DecrementUnsweptFreeBytes(intptr_t by) { unswept_free_bytes_ -= by; }
-
- void DecreaseUnsweptFreeBytes(Page* p) {
- DCHECK(ShouldBeSweptBySweeperThreads(p));
- unswept_free_bytes_ -= (p->area_size() - p->LiveBytes());
- }
-
- void ResetUnsweptFreeBytes() { unswept_free_bytes_ = 0; }
-
// This function tries to steal size_in_bytes memory from the sweeper threads
// free-lists. If it does not succeed stealing enough memory, it will wait
// for the sweeper threads to finish sweeping.
@@ -2053,10 +2060,6 @@ class PagedSpace : public Space {
// Normal allocation information.
AllocationInfo allocation_info_;
- // The number of free bytes which could be reclaimed by advancing the
- // concurrent sweeper threads.
- intptr_t unswept_free_bytes_;
-
// The sweeper threads iterate over the list of pointer and data space pages
// and sweep these pages concurrently. They will stop sweeping after the
// end_of_unswept_pages_ page.
« no previous file with comments | « src/heap/mark-compact.cc ('k') | src/heap/spaces.cc » ('j') | src/heap/spaces.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698