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

Side by Side Diff: src/spaces.h

Issue 7891010: Implement shrinking of paged spaces during sweeping. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: Added tracing output. Created 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 1228
1229 // Grow the space by adding available bytes. They are initially marked as 1229 // Grow the space by adding available bytes. They are initially marked as
1230 // being in use (part of the size), but will normally be immediately freed, 1230 // being in use (part of the size), but will normally be immediately freed,
1231 // putting them on the free list and removing them from size_. 1231 // putting them on the free list and removing them from size_.
1232 void ExpandSpace(int size_in_bytes) { 1232 void ExpandSpace(int size_in_bytes) {
1233 capacity_ += size_in_bytes; 1233 capacity_ += size_in_bytes;
1234 size_ += size_in_bytes; 1234 size_ += size_in_bytes;
1235 ASSERT(size_ >= 0); 1235 ASSERT(size_ >= 0);
1236 } 1236 }
1237 1237
1238 // Shrink the space by removing available bytes. Since shrinking is done
1239 // during sweeping, bytes have been marked as being in use (part of the size)
1240 // and are hereby freed.
1241 void ShrinkSpace(int size_in_bytes) {
1242 capacity_ -= size_in_bytes;
1243 size_ -= size_in_bytes;
1244 ASSERT(size_ >= 0);
1245 }
1246
1238 // Allocate from available bytes (available -> size). 1247 // Allocate from available bytes (available -> size).
1239 void AllocateBytes(intptr_t size_in_bytes) { 1248 void AllocateBytes(intptr_t size_in_bytes) {
1240 size_ += size_in_bytes; 1249 size_ += size_in_bytes;
1241 ASSERT(size_ >= 0); 1250 ASSERT(size_ >= 0);
1242 } 1251 }
1243 1252
1244 // Free allocated bytes, making them available (size -> available). 1253 // Free allocated bytes, making them available (size -> available).
1245 void DeallocateBytes(intptr_t size_in_bytes) { 1254 void DeallocateBytes(intptr_t size_in_bytes) {
1246 size_ -= size_in_bytes; 1255 size_ -= size_in_bytes;
1247 ASSERT(size_ >= 0); 1256 ASSERT(size_ >= 0);
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 // Give a block of memory to the space's free list. It might be added to 1486 // Give a block of memory to the space's free list. It might be added to
1478 // the free list or accounted as waste. 1487 // the free list or accounted as waste.
1479 // If add_to_freelist is false then just accounting stats are updated and 1488 // If add_to_freelist is false then just accounting stats are updated and
1480 // no attempt to add area to free list is made. 1489 // no attempt to add area to free list is made.
1481 int Free(Address start, int size_in_bytes) { 1490 int Free(Address start, int size_in_bytes) {
1482 int wasted = free_list_.Free(start, size_in_bytes); 1491 int wasted = free_list_.Free(start, size_in_bytes);
1483 accounting_stats_.DeallocateBytes(size_in_bytes - wasted); 1492 accounting_stats_.DeallocateBytes(size_in_bytes - wasted);
1484 return size_in_bytes - wasted; 1493 return size_in_bytes - wasted;
1485 } 1494 }
1486 1495
1487 int FreeOrUnmapPage(Page* page, Address start, int size_in_bytes);
1488
1489 // Set space allocation info. 1496 // Set space allocation info.
1490 void SetTop(Address top, Address limit) { 1497 void SetTop(Address top, Address limit) {
1491 ASSERT(top == limit || 1498 ASSERT(top == limit ||
1492 Page::FromAddress(top) == Page::FromAddress(limit - 1)); 1499 Page::FromAddress(top) == Page::FromAddress(limit - 1));
1493 allocation_info_.top = top; 1500 allocation_info_.top = top;
1494 allocation_info_.limit = limit; 1501 allocation_info_.limit = limit;
1495 } 1502 }
1496 1503
1497 void Allocate(int bytes) { 1504 void Allocate(int bytes) {
1498 accounting_stats_.AllocateBytes(bytes); 1505 accounting_stats_.AllocateBytes(bytes);
1499 } 1506 }
1500 1507
1501 void IncreaseCapacity(int size) { 1508 void IncreaseCapacity(int size) {
1502 accounting_stats_.ExpandSpace(size); 1509 accounting_stats_.ExpandSpace(size);
1503 } 1510 }
1504 1511
1505 // Releases half of unused pages. 1512 // Releases an unused page and shrinks the space.
1506 void Shrink(); 1513 void ReleasePage(Page* page);
1514
1515 // Releases all of the unused pages.
1516 void ReleaseAllUnusedPages();
1507 1517
1508 // The dummy page that anchors the linked list of pages. 1518 // The dummy page that anchors the linked list of pages.
1509 Page* anchor() { return &anchor_; } 1519 Page* anchor() { return &anchor_; }
1510 1520
1511 #ifdef DEBUG 1521 #ifdef DEBUG
1512 // Print meta info and objects in this space. 1522 // Print meta info and objects in this space.
1513 virtual void Print(); 1523 virtual void Print();
1514 1524
1515 // Verify integrity of this space. 1525 // Verify integrity of this space.
1516 virtual void Verify(ObjectVisitor* visitor); 1526 virtual void Verify(ObjectVisitor* visitor);
(...skipping 1092 matching lines...) Expand 10 before | Expand all | Expand 10 after
2609 } 2619 }
2610 // Must be small, since an iteration is used for lookup. 2620 // Must be small, since an iteration is used for lookup.
2611 static const int kMaxComments = 64; 2621 static const int kMaxComments = 64;
2612 }; 2622 };
2613 #endif 2623 #endif
2614 2624
2615 2625
2616 } } // namespace v8::internal 2626 } } // namespace v8::internal
2617 2627
2618 #endif // V8_SPACES_H_ 2628 #endif // V8_SPACES_H_
OLDNEW
« no previous file with comments | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698