OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 18 matching lines...) Expand all Loading... |
29 | 29 |
30 #include "code-stubs.h" | 30 #include "code-stubs.h" |
31 #include "compilation-cache.h" | 31 #include "compilation-cache.h" |
32 #include "deoptimizer.h" | 32 #include "deoptimizer.h" |
33 #include "execution.h" | 33 #include "execution.h" |
34 #include "gdb-jit.h" | 34 #include "gdb-jit.h" |
35 #include "global-handles.h" | 35 #include "global-handles.h" |
36 #include "heap-profiler.h" | 36 #include "heap-profiler.h" |
37 #include "ic-inl.h" | 37 #include "ic-inl.h" |
38 #include "incremental-marking.h" | 38 #include "incremental-marking.h" |
39 #include "liveobjectlist-inl.h" | |
40 #include "mark-compact.h" | 39 #include "mark-compact.h" |
41 #include "objects-visiting.h" | 40 #include "objects-visiting.h" |
42 #include "objects-visiting-inl.h" | 41 #include "objects-visiting-inl.h" |
43 #include "stub-cache.h" | 42 #include "stub-cache.h" |
44 | 43 |
45 namespace v8 { | 44 namespace v8 { |
46 namespace internal { | 45 namespace internal { |
47 | 46 |
48 | 47 |
49 const char* Marking::kWhiteBitPattern = "00"; | 48 const char* Marking::kWhiteBitPattern = "00"; |
(...skipping 2535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2585 allocation = new_space->AllocateRaw(size); | 2584 allocation = new_space->AllocateRaw(size); |
2586 ASSERT(!allocation->IsFailure()); | 2585 ASSERT(!allocation->IsFailure()); |
2587 } | 2586 } |
2588 Object* target = allocation->ToObjectUnchecked(); | 2587 Object* target = allocation->ToObjectUnchecked(); |
2589 | 2588 |
2590 MigrateObject(HeapObject::cast(target)->address(), | 2589 MigrateObject(HeapObject::cast(target)->address(), |
2591 object->address(), | 2590 object->address(), |
2592 size, | 2591 size, |
2593 NEW_SPACE); | 2592 NEW_SPACE); |
2594 } else { | 2593 } else { |
2595 // Process the dead object before we write a NULL into its header. | |
2596 LiveObjectList::ProcessNonLive(object); | |
2597 | |
2598 // Mark dead objects in the new space with null in their map field. | 2594 // Mark dead objects in the new space with null in their map field. |
2599 Memory::Address_at(object->address()) = NULL; | 2595 Memory::Address_at(object->address()) = NULL; |
2600 } | 2596 } |
2601 } | 2597 } |
2602 | 2598 |
2603 heap_->IncrementYoungSurvivorsCounter(survivors_size); | 2599 heap_->IncrementYoungSurvivorsCounter(survivors_size); |
2604 new_space->set_age_mark(new_space->top()); | 2600 new_space->set_age_mark(new_space->top()); |
2605 } | 2601 } |
2606 | 2602 |
2607 | 2603 |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2987 object->IterateBody(map->instance_type(), | 2983 object->IterateBody(map->instance_type(), |
2988 object->SizeFromMap(map), | 2984 object->SizeFromMap(map), |
2989 &updating_visitor); | 2985 &updating_visitor); |
2990 } | 2986 } |
2991 } | 2987 } |
2992 | 2988 |
2993 { GCTracer::Scope gc_scope(tracer_, | 2989 { GCTracer::Scope gc_scope(tracer_, |
2994 GCTracer::Scope::MC_UPDATE_ROOT_TO_NEW_POINTERS); | 2990 GCTracer::Scope::MC_UPDATE_ROOT_TO_NEW_POINTERS); |
2995 // Update roots. | 2991 // Update roots. |
2996 heap_->IterateRoots(&updating_visitor, VISIT_ALL_IN_SWEEP_NEWSPACE); | 2992 heap_->IterateRoots(&updating_visitor, VISIT_ALL_IN_SWEEP_NEWSPACE); |
2997 LiveObjectList::IterateElements(&updating_visitor); | |
2998 } | 2993 } |
2999 | 2994 |
3000 { GCTracer::Scope gc_scope(tracer_, | 2995 { GCTracer::Scope gc_scope(tracer_, |
3001 GCTracer::Scope::MC_UPDATE_OLD_TO_NEW_POINTERS); | 2996 GCTracer::Scope::MC_UPDATE_OLD_TO_NEW_POINTERS); |
3002 StoreBufferRebuildScope scope(heap_, | 2997 StoreBufferRebuildScope scope(heap_, |
3003 heap_->store_buffer(), | 2998 heap_->store_buffer(), |
3004 &Heap::ScavengeStoreBufferCallback); | 2999 &Heap::ScavengeStoreBufferCallback); |
3005 heap_->store_buffer()->IteratePointersToNewSpace(&UpdatePointer); | 3000 heap_->store_buffer()->IteratePointersToNewSpace(&UpdatePointer); |
3006 } | 3001 } |
3007 | 3002 |
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3853 while (buffer != NULL) { | 3848 while (buffer != NULL) { |
3854 SlotsBuffer* next_buffer = buffer->next(); | 3849 SlotsBuffer* next_buffer = buffer->next(); |
3855 DeallocateBuffer(buffer); | 3850 DeallocateBuffer(buffer); |
3856 buffer = next_buffer; | 3851 buffer = next_buffer; |
3857 } | 3852 } |
3858 *buffer_address = NULL; | 3853 *buffer_address = NULL; |
3859 } | 3854 } |
3860 | 3855 |
3861 | 3856 |
3862 } } // namespace v8::internal | 3857 } } // namespace v8::internal |
OLD | NEW |