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

Side by Side Diff: src/heap/mark-compact.cc

Issue 1403633004: [heap] Reland decrease large object limit for regular heap objects. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « no previous file | src/heap/scavenger.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 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 2645 matching lines...) Expand 10 before | Expand all | Expand 10 after
2656 // to new space. We should clear them to avoid encountering them during next 2656 // to new space. We should clear them to avoid encountering them during next
2657 // pointer iteration. This is an issue if the store buffer overflows and we 2657 // pointer iteration. This is an issue if the store buffer overflows and we
2658 // have to scan the entire old space, including dead objects, looking for 2658 // have to scan the entire old space, including dead objects, looking for
2659 // pointers to new space. 2659 // pointers to new space.
2660 void MarkCompactCollector::MigrateObject( 2660 void MarkCompactCollector::MigrateObject(
2661 HeapObject* dst, HeapObject* src, int size, AllocationSpace dest, 2661 HeapObject* dst, HeapObject* src, int size, AllocationSpace dest,
2662 SlotsBuffer** evacuation_slots_buffer) { 2662 SlotsBuffer** evacuation_slots_buffer) {
2663 Address dst_addr = dst->address(); 2663 Address dst_addr = dst->address();
2664 Address src_addr = src->address(); 2664 Address src_addr = src->address();
2665 DCHECK(heap()->AllowedToBeMigrated(src, dest)); 2665 DCHECK(heap()->AllowedToBeMigrated(src, dest));
2666 DCHECK(dest != LO_SPACE && size <= Page::kMaxRegularHeapObjectSize); 2666 DCHECK(dest != LO_SPACE);
2667 if (dest == OLD_SPACE) { 2667 if (dest == OLD_SPACE) {
2668 DCHECK_OBJECT_SIZE(size);
2668 DCHECK(evacuation_slots_buffer != nullptr); 2669 DCHECK(evacuation_slots_buffer != nullptr);
2669 DCHECK(IsAligned(size, kPointerSize)); 2670 DCHECK(IsAligned(size, kPointerSize));
2670 switch (src->ContentType()) { 2671 switch (src->ContentType()) {
2671 case HeapObjectContents::kTaggedValues: 2672 case HeapObjectContents::kTaggedValues:
2672 MigrateObjectTagged(dst, src, size, evacuation_slots_buffer); 2673 MigrateObjectTagged(dst, src, size, evacuation_slots_buffer);
2673 break; 2674 break;
2674 2675
2675 case HeapObjectContents::kMixedValues: 2676 case HeapObjectContents::kMixedValues:
2676 MigrateObjectMixed(dst, src, size, evacuation_slots_buffer); 2677 MigrateObjectMixed(dst, src, size, evacuation_slots_buffer);
2677 break; 2678 break;
2678 2679
2679 case HeapObjectContents::kRawValues: 2680 case HeapObjectContents::kRawValues:
2680 MigrateObjectRaw(dst, src, size); 2681 MigrateObjectRaw(dst, src, size);
2681 break; 2682 break;
2682 } 2683 }
2683 2684
2684 if (compacting_ && dst->IsJSFunction()) { 2685 if (compacting_ && dst->IsJSFunction()) {
2685 Address code_entry_slot = dst->address() + JSFunction::kCodeEntryOffset; 2686 Address code_entry_slot = dst->address() + JSFunction::kCodeEntryOffset;
2686 Address code_entry = Memory::Address_at(code_entry_slot); 2687 Address code_entry = Memory::Address_at(code_entry_slot);
2687 RecordMigratedCodeEntrySlot(code_entry, code_entry_slot, 2688 RecordMigratedCodeEntrySlot(code_entry, code_entry_slot,
2688 evacuation_slots_buffer); 2689 evacuation_slots_buffer);
2689 } 2690 }
2690 } else if (dest == CODE_SPACE) { 2691 } else if (dest == CODE_SPACE) {
2692 DCHECK_CODEOBJECT_SIZE(size, heap()->code_space());
2691 DCHECK(evacuation_slots_buffer != nullptr); 2693 DCHECK(evacuation_slots_buffer != nullptr);
2692 PROFILE(isolate(), CodeMoveEvent(src_addr, dst_addr)); 2694 PROFILE(isolate(), CodeMoveEvent(src_addr, dst_addr));
2693 heap()->MoveBlock(dst_addr, src_addr, size); 2695 heap()->MoveBlock(dst_addr, src_addr, size);
2694 RecordMigratedCodeObjectSlot(dst_addr, evacuation_slots_buffer); 2696 RecordMigratedCodeObjectSlot(dst_addr, evacuation_slots_buffer);
2695 Code::cast(dst)->Relocate(dst_addr - src_addr); 2697 Code::cast(dst)->Relocate(dst_addr - src_addr);
2696 } else { 2698 } else {
2699 DCHECK_OBJECT_SIZE(size);
2697 DCHECK(evacuation_slots_buffer == nullptr); 2700 DCHECK(evacuation_slots_buffer == nullptr);
2698 DCHECK(dest == NEW_SPACE); 2701 DCHECK(dest == NEW_SPACE);
2699 heap()->MoveBlock(dst_addr, src_addr, size); 2702 heap()->MoveBlock(dst_addr, src_addr, size);
2700 } 2703 }
2701 heap()->OnMoveEvent(dst, src, size); 2704 heap()->OnMoveEvent(dst, src, size);
2702 Memory::Address_at(src_addr) = dst_addr; 2705 Memory::Address_at(src_addr) = dst_addr;
2703 } 2706 }
2704 2707
2705 2708
2706 void MarkCompactCollector::MigrateObjectTagged( 2709 void MarkCompactCollector::MigrateObjectTagged(
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
3070 if (map_word.IsForwardingAddress()) { 3073 if (map_word.IsForwardingAddress()) {
3071 return String::cast(map_word.ToForwardingAddress()); 3074 return String::cast(map_word.ToForwardingAddress());
3072 } 3075 }
3073 3076
3074 return String::cast(*p); 3077 return String::cast(*p);
3075 } 3078 }
3076 3079
3077 3080
3078 bool MarkCompactCollector::TryPromoteObject(HeapObject* object, 3081 bool MarkCompactCollector::TryPromoteObject(HeapObject* object,
3079 int object_size) { 3082 int object_size) {
3080 DCHECK(object_size <= Page::kMaxRegularHeapObjectSize);
3081
3082 OldSpace* old_space = heap()->old_space(); 3083 OldSpace* old_space = heap()->old_space();
3083 3084
3084 HeapObject* target = nullptr; 3085 HeapObject* target = nullptr;
3085 AllocationAlignment alignment = object->RequiredAlignment(); 3086 AllocationAlignment alignment = object->RequiredAlignment();
3086 AllocationResult allocation = old_space->AllocateRaw(object_size, alignment); 3087 AllocationResult allocation = old_space->AllocateRaw(object_size, alignment);
3087 if (allocation.To(&target)) { 3088 if (allocation.To(&target)) {
3088 MigrateObject(target, object, object_size, old_space->identity(), 3089 MigrateObject(target, object, object_size, old_space->identity(),
3089 &migration_slots_buffer_); 3090 &migration_slots_buffer_);
3090 // If we end up needing more special cases, we should factor this out. 3091 // If we end up needing more special cases, we should factor this out.
3091 if (V8_UNLIKELY(target->IsJSArrayBuffer())) { 3092 if (V8_UNLIKELY(target->IsJSArrayBuffer())) {
(...skipping 1509 matching lines...) Expand 10 before | Expand all | Expand 10 after
4601 MarkBit mark_bit = Marking::MarkBitFrom(host); 4602 MarkBit mark_bit = Marking::MarkBitFrom(host);
4602 if (Marking::IsBlack(mark_bit)) { 4603 if (Marking::IsBlack(mark_bit)) {
4603 RelocInfo rinfo(pc, RelocInfo::CODE_TARGET, 0, host); 4604 RelocInfo rinfo(pc, RelocInfo::CODE_TARGET, 0, host);
4604 RecordRelocSlot(&rinfo, target); 4605 RecordRelocSlot(&rinfo, target);
4605 } 4606 }
4606 } 4607 }
4607 } 4608 }
4608 4609
4609 } // namespace internal 4610 } // namespace internal
4610 } // namespace v8 4611 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/heap/scavenger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698