OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/heap/mark-compact.h" | 5 #include "src/heap/mark-compact.h" |
6 | 6 |
7 #include "src/base/atomicops.h" | 7 #include "src/base/atomicops.h" |
8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
9 #include "src/base/sys-info.h" | 9 #include "src/base/sys-info.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 3756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3767 // Clear sweeping flags indicating that marking bits are still intact. | 3767 // Clear sweeping flags indicating that marking bits are still intact. |
3768 p->ClearWasSwept(); | 3768 p->ClearWasSwept(); |
3769 | 3769 |
3770 if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION) || | 3770 if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION) || |
3771 p->IsEvacuationCandidate()) { | 3771 p->IsEvacuationCandidate()) { |
3772 // Will be processed in EvacuateNewSpaceAndCandidates. | 3772 // Will be processed in EvacuateNewSpaceAndCandidates. |
3773 DCHECK(evacuation_candidates_.length() > 0); | 3773 DCHECK(evacuation_candidates_.length() > 0); |
3774 continue; | 3774 continue; |
3775 } | 3775 } |
3776 | 3776 |
3777 if (p->IsFlagSet(Page::NEVER_ALLOCATE_ON_PAGE)) { | |
3778 // We do not sweep pages that are marked to be ignored for allocation. | |
3779 p->SetWasSwept(); | |
3780 Bitmap::Clear(p); | |
3781 p->ResetLiveBytes(); | |
Hannes Payer (out of office)
2015/12/16 12:07:14
Should we really reset live bytes here? That would
Michael Lippautz
2015/12/16 12:13:14
We reset live bytes after sweeping a page. I think
Hannes Payer (out of office)
2015/12/16 12:44:00
Acknowledged.
| |
3782 continue; | |
3783 } | |
3784 | |
3777 // One unused page is kept, all further are released before sweeping them. | 3785 // One unused page is kept, all further are released before sweeping them. |
3778 if (p->LiveBytes() == 0) { | 3786 if (p->LiveBytes() == 0) { |
3779 if (unused_page_present) { | 3787 if (unused_page_present) { |
3780 if (FLAG_gc_verbose) { | 3788 if (FLAG_gc_verbose) { |
3781 PrintIsolate(isolate(), "sweeping: released page: %p", p); | 3789 PrintIsolate(isolate(), "sweeping: released page: %p", p); |
3782 } | 3790 } |
3783 space->ReleasePage(p); | 3791 space->ReleasePage(p); |
3784 continue; | 3792 continue; |
3785 } | 3793 } |
3786 unused_page_present = true; | 3794 unused_page_present = true; |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3959 MarkBit mark_bit = Marking::MarkBitFrom(host); | 3967 MarkBit mark_bit = Marking::MarkBitFrom(host); |
3960 if (Marking::IsBlack(mark_bit)) { | 3968 if (Marking::IsBlack(mark_bit)) { |
3961 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host); | 3969 RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host); |
3962 RecordRelocSlot(&rinfo, target); | 3970 RecordRelocSlot(&rinfo, target); |
3963 } | 3971 } |
3964 } | 3972 } |
3965 } | 3973 } |
3966 | 3974 |
3967 } // namespace internal | 3975 } // namespace internal |
3968 } // namespace v8 | 3976 } // namespace v8 |
OLD | NEW |