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 1282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1293 } | 1293 } |
1294 return NULL; | 1294 return NULL; |
1295 } | 1295 } |
1296 | 1296 |
1297 private: | 1297 private: |
1298 Heap* heap_; | 1298 Heap* heap_; |
1299 }; | 1299 }; |
1300 | 1300 |
1301 | 1301 |
1302 void Heap::Scavenge() { | 1302 void Heap::Scavenge() { |
| 1303 RelocationLock relocation_lock(this); |
| 1304 |
1303 #ifdef VERIFY_HEAP | 1305 #ifdef VERIFY_HEAP |
1304 if (FLAG_verify_heap) VerifyNonPointerSpacePointers(); | 1306 if (FLAG_verify_heap) VerifyNonPointerSpacePointers(); |
1305 #endif | 1307 #endif |
1306 | 1308 |
1307 gc_state_ = SCAVENGE; | 1309 gc_state_ = SCAVENGE; |
1308 | 1310 |
1309 // Implements Cheney's copying algorithm | 1311 // Implements Cheney's copying algorithm |
1310 LOG(isolate_, ResourceEvent("scavenge", "begin")); | 1312 LOG(isolate_, ResourceEvent("scavenge", "begin")); |
1311 | 1313 |
1312 // Clear descriptor cache. | 1314 // Clear descriptor cache. |
(...skipping 5315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6628 } else { | 6630 } else { |
6629 set_hash_seed(Smi::FromInt(FLAG_hash_seed)); | 6631 set_hash_seed(Smi::FromInt(FLAG_hash_seed)); |
6630 } | 6632 } |
6631 } | 6633 } |
6632 | 6634 |
6633 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); | 6635 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); |
6634 LOG(isolate_, IntPtrTEvent("heap-available", Available())); | 6636 LOG(isolate_, IntPtrTEvent("heap-available", Available())); |
6635 | 6637 |
6636 store_buffer()->SetUp(); | 6638 store_buffer()->SetUp(); |
6637 | 6639 |
| 6640 if (FLAG_parallel_recompilation) relocation_mutex_ = OS::CreateMutex(); |
| 6641 #ifdef DEBUG |
| 6642 relocation_mutex_locked_by_optimizer_thread_ = false; |
| 6643 #endif // DEBUG |
| 6644 |
6638 return true; | 6645 return true; |
6639 } | 6646 } |
6640 | 6647 |
6641 bool Heap::CreateHeapObjects() { | 6648 bool Heap::CreateHeapObjects() { |
6642 // Create initial maps. | 6649 // Create initial maps. |
6643 if (!CreateInitialMaps()) return false; | 6650 if (!CreateInitialMaps()) return false; |
6644 if (!CreateApiObjects()) return false; | 6651 if (!CreateApiObjects()) return false; |
6645 | 6652 |
6646 // Create initial objects | 6653 // Create initial objects |
6647 if (!CreateInitialObjects()) return false; | 6654 if (!CreateInitialObjects()) return false; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6730 if (lo_space_ != NULL) { | 6737 if (lo_space_ != NULL) { |
6731 lo_space_->TearDown(); | 6738 lo_space_->TearDown(); |
6732 delete lo_space_; | 6739 delete lo_space_; |
6733 lo_space_ = NULL; | 6740 lo_space_ = NULL; |
6734 } | 6741 } |
6735 | 6742 |
6736 store_buffer()->TearDown(); | 6743 store_buffer()->TearDown(); |
6737 incremental_marking()->TearDown(); | 6744 incremental_marking()->TearDown(); |
6738 | 6745 |
6739 isolate_->memory_allocator()->TearDown(); | 6746 isolate_->memory_allocator()->TearDown(); |
| 6747 |
| 6748 delete relocation_mutex_; |
6740 } | 6749 } |
6741 | 6750 |
6742 | 6751 |
6743 void Heap::AddGCPrologueCallback(GCPrologueCallback callback, GCType gc_type) { | 6752 void Heap::AddGCPrologueCallback(GCPrologueCallback callback, GCType gc_type) { |
6744 ASSERT(callback != NULL); | 6753 ASSERT(callback != NULL); |
6745 GCPrologueCallbackPair pair(callback, gc_type); | 6754 GCPrologueCallbackPair pair(callback, gc_type); |
6746 ASSERT(!gc_prologue_callbacks_.Contains(pair)); | 6755 ASSERT(!gc_prologue_callbacks_.Contains(pair)); |
6747 return gc_prologue_callbacks_.Add(pair); | 6756 return gc_prologue_callbacks_.Add(pair); |
6748 } | 6757 } |
6749 | 6758 |
(...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7859 counters->size_of_FIXED_ARRAY_##name()->Decrement( \ | 7868 counters->size_of_FIXED_ARRAY_##name()->Decrement( \ |
7860 static_cast<int>(object_sizes_last_time_[index])); | 7869 static_cast<int>(object_sizes_last_time_[index])); |
7861 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(ADJUST_LAST_TIME_OBJECT_COUNT) | 7870 FIXED_ARRAY_SUB_INSTANCE_TYPE_LIST(ADJUST_LAST_TIME_OBJECT_COUNT) |
7862 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 7871 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
7863 | 7872 |
7864 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 7873 OS::MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
7865 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 7874 OS::MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
7866 ClearObjectStats(); | 7875 ClearObjectStats(); |
7867 } | 7876 } |
7868 | 7877 |
| 7878 |
| 7879 Heap::RelocationLock::RelocationLock(Heap* heap) : heap_(heap) { |
| 7880 if (FLAG_parallel_recompilation) { |
| 7881 heap_->relocation_mutex_->Lock(); |
| 7882 #ifdef DEBUG |
| 7883 heap_->relocation_mutex_locked_by_optimizer_thread_ = |
| 7884 heap_->isolate()->optimizing_compiler_thread()->IsOptimizerThread(); |
| 7885 #endif // DEBUG |
| 7886 } |
| 7887 } |
| 7888 |
7869 } } // namespace v8::internal | 7889 } } // namespace v8::internal |
OLD | NEW |