OLD | NEW |
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 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 // ----------------------------------------------------------------------------- | 651 // ----------------------------------------------------------------------------- |
652 // PagedSpace implementation | 652 // PagedSpace implementation |
653 | 653 |
654 PagedSpace::PagedSpace(Heap* heap, | 654 PagedSpace::PagedSpace(Heap* heap, |
655 intptr_t max_capacity, | 655 intptr_t max_capacity, |
656 AllocationSpace id, | 656 AllocationSpace id, |
657 Executability executable) | 657 Executability executable) |
658 : Space(heap, id, executable), | 658 : Space(heap, id, executable), |
659 free_list_(this), | 659 free_list_(this), |
660 was_swept_conservatively_(false), | 660 was_swept_conservatively_(false), |
661 first_unswept_page_(Page::FromAddress(NULL)) { | 661 first_unswept_page_(Page::FromAddress(NULL)), |
| 662 unswept_free_bytes_(0) { |
662 max_capacity_ = (RoundDown(max_capacity, Page::kPageSize) / Page::kPageSize) | 663 max_capacity_ = (RoundDown(max_capacity, Page::kPageSize) / Page::kPageSize) |
663 * Page::kObjectAreaSize; | 664 * Page::kObjectAreaSize; |
664 accounting_stats_.Clear(); | 665 accounting_stats_.Clear(); |
665 | 666 |
666 allocation_info_.top = NULL; | 667 allocation_info_.top = NULL; |
667 allocation_info_.limit = NULL; | 668 allocation_info_.limit = NULL; |
668 | 669 |
669 anchor_.InitializeAsAnchor(this); | 670 anchor_.InitializeAsAnchor(this); |
670 } | 671 } |
671 | 672 |
(...skipping 1383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2055 Bitmap::Clear(p); | 2056 Bitmap::Clear(p); |
2056 if (FLAG_gc_verbose) { | 2057 if (FLAG_gc_verbose) { |
2057 PrintF("Sweeping 0x%" V8PRIxPTR " lazily abandoned.\n", | 2058 PrintF("Sweeping 0x%" V8PRIxPTR " lazily abandoned.\n", |
2058 reinterpret_cast<intptr_t>(p)); | 2059 reinterpret_cast<intptr_t>(p)); |
2059 } | 2060 } |
2060 } | 2061 } |
2061 p = p->next_page(); | 2062 p = p->next_page(); |
2062 } while (p != anchor()); | 2063 } while (p != anchor()); |
2063 } | 2064 } |
2064 first_unswept_page_ = Page::FromAddress(NULL); | 2065 first_unswept_page_ = Page::FromAddress(NULL); |
| 2066 unswept_free_bytes_ = 0; |
2065 | 2067 |
2066 // Clear the free list before a full GC---it will be rebuilt afterward. | 2068 // Clear the free list before a full GC---it will be rebuilt afterward. |
2067 free_list_.Reset(); | 2069 free_list_.Reset(); |
2068 } | 2070 } |
2069 | 2071 |
2070 | 2072 |
2071 bool PagedSpace::ReserveSpace(int size_in_bytes) { | 2073 bool PagedSpace::ReserveSpace(int size_in_bytes) { |
2072 ASSERT(size_in_bytes <= Page::kMaxHeapObjectSize); | 2074 ASSERT(size_in_bytes <= Page::kMaxHeapObjectSize); |
2073 ASSERT(size_in_bytes == RoundSizeDownToObjectAlignment(size_in_bytes)); | 2075 ASSERT(size_in_bytes == RoundSizeDownToObjectAlignment(size_in_bytes)); |
2074 Address current_top = allocation_info_.top; | 2076 Address current_top = allocation_info_.top; |
(...skipping 28 matching lines...) Expand all Loading... |
2103 | 2105 |
2104 intptr_t freed_bytes = 0; | 2106 intptr_t freed_bytes = 0; |
2105 Page* p = first_unswept_page_; | 2107 Page* p = first_unswept_page_; |
2106 do { | 2108 do { |
2107 Page* next_page = p->next_page(); | 2109 Page* next_page = p->next_page(); |
2108 if (ShouldBeSweptLazily(p)) { | 2110 if (ShouldBeSweptLazily(p)) { |
2109 if (FLAG_gc_verbose) { | 2111 if (FLAG_gc_verbose) { |
2110 PrintF("Sweeping 0x%" V8PRIxPTR " lazily advanced.\n", | 2112 PrintF("Sweeping 0x%" V8PRIxPTR " lazily advanced.\n", |
2111 reinterpret_cast<intptr_t>(p)); | 2113 reinterpret_cast<intptr_t>(p)); |
2112 } | 2114 } |
| 2115 unswept_free_bytes_ -= (Page::kObjectAreaSize - p->LiveBytes()); |
2113 freed_bytes += MarkCompactCollector::SweepConservatively(this, p); | 2116 freed_bytes += MarkCompactCollector::SweepConservatively(this, p); |
2114 } | 2117 } |
2115 p = next_page; | 2118 p = next_page; |
2116 } while (p != anchor() && freed_bytes < bytes_to_sweep); | 2119 } while (p != anchor() && freed_bytes < bytes_to_sweep); |
2117 | 2120 |
2118 if (p == anchor()) { | 2121 if (p == anchor()) { |
2119 first_unswept_page_ = Page::FromAddress(NULL); | 2122 first_unswept_page_ = Page::FromAddress(NULL); |
2120 } else { | 2123 } else { |
2121 first_unswept_page_ = p; | 2124 first_unswept_page_ = p; |
2122 } | 2125 } |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2658 object->ShortPrint(); | 2661 object->ShortPrint(); |
2659 PrintF("\n"); | 2662 PrintF("\n"); |
2660 } | 2663 } |
2661 printf(" --------------------------------------\n"); | 2664 printf(" --------------------------------------\n"); |
2662 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 2665 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
2663 } | 2666 } |
2664 | 2667 |
2665 #endif // DEBUG | 2668 #endif // DEBUG |
2666 | 2669 |
2667 } } // namespace v8::internal | 2670 } } // namespace v8::internal |
OLD | NEW |