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

Side by Side Diff: src/spaces.cc

Issue 6088012: Separate markbits from heap object map words into bitmaps. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: profiler related code reenabled Created 9 years, 11 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
« src/spaces.h ('K') | « src/spaces.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2010 the V8 project authors. All rights reserved. 1 // Copyright 2006-2010 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 1541 matching lines...) Expand 10 before | Expand all | Expand 10 after
1552 free_[rem].head_node_ = rem_node->address(); 1552 free_[rem].head_node_ = rem_node->address();
1553 if (rem_node->next() == NULL) InsertSize(rem); 1553 if (rem_node->next() == NULL) InsertSize(rem);
1554 } 1554 }
1555 available_ -= size_in_bytes; 1555 available_ -= size_in_bytes;
1556 *wasted_bytes = 0; 1556 *wasted_bytes = 0;
1557 return cur_node; 1557 return cur_node;
1558 } 1558 }
1559 1559
1560 1560
1561 void OldSpaceFreeList::MarkNodes() { 1561 void OldSpaceFreeList::MarkNodes() {
1562 #if 0
1562 for (int i = 0; i < kFreeListsLength; i++) { 1563 for (int i = 0; i < kFreeListsLength; i++) {
1563 Address cur_addr = free_[i].head_node_; 1564 Address cur_addr = free_[i].head_node_;
1564 while (cur_addr != NULL) { 1565 while (cur_addr != NULL) {
1565 FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr); 1566 FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr);
1566 cur_addr = cur_node->next(); 1567 cur_addr = cur_node->next();
1567 cur_node->SetMark(); 1568 cur_node->SetMark();
1568 } 1569 }
1569 } 1570 }
1571 #endif
1572 UNREACHABLE();
1570 } 1573 }
1571 1574
1572 1575
1573 #ifdef DEBUG 1576 #ifdef DEBUG
1574 bool OldSpaceFreeList::Contains(FreeListNode* node) { 1577 bool OldSpaceFreeList::Contains(FreeListNode* node) {
1575 for (int i = 0; i < kFreeListsLength; i++) { 1578 for (int i = 0; i < kFreeListsLength; i++) {
1576 Address cur_addr = free_[i].head_node_; 1579 Address cur_addr = free_[i].head_node_;
1577 while (cur_addr != NULL) { 1580 while (cur_addr != NULL) {
1578 FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr); 1581 FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr);
1579 if (cur_node == node) return true; 1582 if (cur_node == node) return true;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1623 1626
1624 ASSERT(!FLAG_always_compact); // We only use the freelists with mark-sweep. 1627 ASSERT(!FLAG_always_compact); // We only use the freelists with mark-sweep.
1625 FreeListNode* node = FreeListNode::FromAddress(head_); 1628 FreeListNode* node = FreeListNode::FromAddress(head_);
1626 head_ = node->next(); 1629 head_ = node->next();
1627 available_ -= object_size_; 1630 available_ -= object_size_;
1628 return node; 1631 return node;
1629 } 1632 }
1630 1633
1631 1634
1632 void FixedSizeFreeList::MarkNodes() { 1635 void FixedSizeFreeList::MarkNodes() {
1636 #if 0
1633 Address cur_addr = head_; 1637 Address cur_addr = head_;
1634 while (cur_addr != NULL && cur_addr != tail_) { 1638 while (cur_addr != NULL && cur_addr != tail_) {
1635 FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr); 1639 FreeListNode* cur_node = FreeListNode::FromAddress(cur_addr);
1636 cur_addr = cur_node->next(); 1640 cur_addr = cur_node->next();
1637 cur_node->SetMark(); 1641 cur_node->SetMark();
1638 } 1642 }
1643 #endif
1644 UNREACHABLE();
1639 } 1645 }
1640 1646
1641 1647
1642 // ----------------------------------------------------------------------------- 1648 // -----------------------------------------------------------------------------
1643 // OldSpace implementation 1649 // OldSpace implementation
1644 1650
1645 void OldSpace::PrepareForMarkCompact(bool will_compact) { 1651 void OldSpace::PrepareForMarkCompact(bool will_compact) {
1646 ASSERT(!will_compact); 1652 ASSERT(!will_compact);
1647 // Call prepare of the super class. 1653 // Call prepare of the super class.
1648 PagedSpace::PrepareForMarkCompact(will_compact); 1654 PagedSpace::PrepareForMarkCompact(will_compact);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1690 last_page_->set_next_page(first); 1696 last_page_->set_next_page(first);
1691 last_page_ = last; 1697 last_page_ = last;
1692 last->set_next_page(NULL); 1698 last->set_next_page(NULL);
1693 1699
1694 // Clean them up. 1700 // Clean them up.
1695 do { 1701 do {
1696 first->InvalidateWatermark(true); 1702 first->InvalidateWatermark(true);
1697 first->SetAllocationWatermark(first->ObjectAreaStart()); 1703 first->SetAllocationWatermark(first->ObjectAreaStart());
1698 first->SetCachedAllocationWatermark(first->ObjectAreaStart()); 1704 first->SetCachedAllocationWatermark(first->ObjectAreaStart());
1699 first->SetRegionMarks(Page::kAllRegionsCleanMarks); 1705 first->SetRegionMarks(Page::kAllRegionsCleanMarks);
1706 first->markbits()->Clear();
1700 first = first->next_page(); 1707 first = first->next_page();
1701 } while (first != NULL); 1708 } while (first != NULL);
1702 } 1709 }
1703 1710
1704 1711
1705 void PagedSpace::PrepareForMarkCompact(bool will_compact) { 1712 void PagedSpace::PrepareForMarkCompact(bool will_compact) {
1706 ASSERT(!will_compact); 1713 ASSERT(!will_compact);
1707 } 1714 }
1708 1715
1709 1716
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
2321 } 2328 }
2322 } 2329 }
2323 } 2330 }
2324 2331
2325 2332
2326 void LargeObjectSpace::FreeUnmarkedObjects() { 2333 void LargeObjectSpace::FreeUnmarkedObjects() {
2327 LargePage* previous = NULL; 2334 LargePage* previous = NULL;
2328 LargePage* current = first_page_; 2335 LargePage* current = first_page_;
2329 while (current != NULL) { 2336 while (current != NULL) {
2330 HeapObject* object = current->GetObject(); 2337 HeapObject* object = current->GetObject();
2331 if (object->IsMarked()) { 2338 if (Marking::IsMarked(object)) {
2332 object->ClearMark(); 2339 Marking::ClearMark(object);
2333 MarkCompactCollector::tracer()->decrement_marked_count(); 2340 MarkCompactCollector::tracer()->decrement_marked_count();
2334 previous = current; 2341 previous = current;
2335 current = current->next_page(); 2342 current = current->next_page();
2336 } else { 2343 } else {
2337 LargePage* page = current; 2344 LargePage* page = current;
2338 // Cut the chunk out from the chunk list. 2345 // Cut the chunk out from the chunk list.
2339 current = current->next_page(); 2346 current = current->next_page();
2340 if (previous == NULL) { 2347 if (previous == NULL) {
2341 first_page_ = current; 2348 first_page_ = current;
2342 } else { 2349 } else {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
2460 for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next()) { 2467 for (HeapObject* obj = obj_it.next(); obj != NULL; obj = obj_it.next()) {
2461 if (obj->IsCode()) { 2468 if (obj->IsCode()) {
2462 Code* code = Code::cast(obj); 2469 Code* code = Code::cast(obj);
2463 code_kind_statistics[code->kind()] += code->Size(); 2470 code_kind_statistics[code->kind()] += code->Size();
2464 } 2471 }
2465 } 2472 }
2466 } 2473 }
2467 #endif // DEBUG 2474 #endif // DEBUG
2468 2475
2469 } } // namespace v8::internal 2476 } } // namespace v8::internal
OLDNEW
« src/spaces.h ('K') | « src/spaces.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698