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 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 incremental_marking_(this), | 148 incremental_marking_(this), |
149 number_idle_notifications_(0), | 149 number_idle_notifications_(0), |
150 last_idle_notification_gc_count_(0), | 150 last_idle_notification_gc_count_(0), |
151 last_idle_notification_gc_count_init_(false), | 151 last_idle_notification_gc_count_init_(false), |
152 mark_sweeps_since_idle_round_started_(0), | 152 mark_sweeps_since_idle_round_started_(0), |
153 ms_count_at_last_idle_notification_(0), | 153 ms_count_at_last_idle_notification_(0), |
154 gc_count_at_last_idle_gc_(0), | 154 gc_count_at_last_idle_gc_(0), |
155 scavenges_since_last_idle_round_(kIdleScavengeThreshold), | 155 scavenges_since_last_idle_round_(kIdleScavengeThreshold), |
156 promotion_queue_(this), | 156 promotion_queue_(this), |
157 configured_(false), | 157 configured_(false), |
158 chunks_queued_for_free_(NULL) { | 158 chunks_queued_for_free_(NULL), |
| 159 relocation_mutex_(NULL) { |
159 // Allow build-time customization of the max semispace size. Building | 160 // Allow build-time customization of the max semispace size. Building |
160 // V8 with snapshots and a non-default max semispace size is much | 161 // V8 with snapshots and a non-default max semispace size is much |
161 // easier if you can define it as part of the build environment. | 162 // easier if you can define it as part of the build environment. |
162 #if defined(V8_MAX_SEMISPACE_SIZE) | 163 #if defined(V8_MAX_SEMISPACE_SIZE) |
163 max_semispace_size_ = reserved_semispace_size_ = V8_MAX_SEMISPACE_SIZE; | 164 max_semispace_size_ = reserved_semispace_size_ = V8_MAX_SEMISPACE_SIZE; |
164 #endif | 165 #endif |
165 | 166 |
166 intptr_t max_virtual = OS::MaxVirtualMemory(); | 167 intptr_t max_virtual = OS::MaxVirtualMemory(); |
167 | 168 |
168 if (max_virtual > 0) { | 169 if (max_virtual > 0) { |
(...skipping 1023 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 } | 1193 } |
1193 return NULL; | 1194 return NULL; |
1194 } | 1195 } |
1195 | 1196 |
1196 private: | 1197 private: |
1197 Heap* heap_; | 1198 Heap* heap_; |
1198 }; | 1199 }; |
1199 | 1200 |
1200 | 1201 |
1201 void Heap::Scavenge() { | 1202 void Heap::Scavenge() { |
| 1203 RelocationLock relocation_lock(this); |
1202 #ifdef DEBUG | 1204 #ifdef DEBUG |
1203 if (FLAG_verify_heap) VerifyNonPointerSpacePointers(); | 1205 if (FLAG_verify_heap) VerifyNonPointerSpacePointers(); |
1204 #endif | 1206 #endif |
1205 | 1207 |
1206 gc_state_ = SCAVENGE; | 1208 gc_state_ = SCAVENGE; |
1207 | 1209 |
1208 // Implements Cheney's copying algorithm | 1210 // Implements Cheney's copying algorithm |
1209 LOG(isolate_, ResourceEvent("scavenge", "begin")); | 1211 LOG(isolate_, ResourceEvent("scavenge", "begin")); |
1210 | 1212 |
1211 // Clear descriptor cache. | 1213 // Clear descriptor cache. |
(...skipping 4937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6149 if (!CreateInitialObjects()) return false; | 6151 if (!CreateInitialObjects()) return false; |
6150 | 6152 |
6151 global_contexts_list_ = undefined_value(); | 6153 global_contexts_list_ = undefined_value(); |
6152 } | 6154 } |
6153 | 6155 |
6154 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); | 6156 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); |
6155 LOG(isolate_, IntPtrTEvent("heap-available", Available())); | 6157 LOG(isolate_, IntPtrTEvent("heap-available", Available())); |
6156 | 6158 |
6157 store_buffer()->SetUp(); | 6159 store_buffer()->SetUp(); |
6158 | 6160 |
| 6161 if (FLAG_parallel_recompilation) relocation_mutex_ = OS::CreateMutex(); |
| 6162 |
6159 return true; | 6163 return true; |
6160 } | 6164 } |
6161 | 6165 |
6162 | 6166 |
6163 void Heap::SetStackLimits() { | 6167 void Heap::SetStackLimits() { |
6164 ASSERT(isolate_ != NULL); | 6168 ASSERT(isolate_ != NULL); |
6165 ASSERT(isolate_ == isolate()); | 6169 ASSERT(isolate_ == isolate()); |
6166 // On 64 bit machines, pointers are generally out of range of Smis. We write | 6170 // On 64 bit machines, pointers are generally out of range of Smis. We write |
6167 // something that looks like an out of range Smi to the GC. | 6171 // something that looks like an out of range Smi to the GC. |
6168 | 6172 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6234 lo_space_->TearDown(); | 6238 lo_space_->TearDown(); |
6235 delete lo_space_; | 6239 delete lo_space_; |
6236 lo_space_ = NULL; | 6240 lo_space_ = NULL; |
6237 } | 6241 } |
6238 | 6242 |
6239 store_buffer()->TearDown(); | 6243 store_buffer()->TearDown(); |
6240 incremental_marking()->TearDown(); | 6244 incremental_marking()->TearDown(); |
6241 | 6245 |
6242 isolate_->memory_allocator()->TearDown(); | 6246 isolate_->memory_allocator()->TearDown(); |
6243 | 6247 |
| 6248 delete relocation_mutex_; |
| 6249 |
6244 #ifdef DEBUG | 6250 #ifdef DEBUG |
6245 delete debug_utils_; | 6251 delete debug_utils_; |
6246 debug_utils_ = NULL; | 6252 debug_utils_ = NULL; |
6247 #endif | 6253 #endif |
6248 } | 6254 } |
6249 | 6255 |
6250 | 6256 |
6251 void Heap::Shrink() { | 6257 void Heap::Shrink() { |
6252 // Try to shrink all paged spaces. | 6258 // Try to shrink all paged spaces. |
6253 PagedSpaces spaces; | 6259 PagedSpaces spaces; |
(...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7218 static_cast<int>(object_sizes_last_time_[index])); | 7224 static_cast<int>(object_sizes_last_time_[index])); |
7219 CODE_KIND_LIST(ADJUST_LAST_TIME_OBJECT_COUNT) | 7225 CODE_KIND_LIST(ADJUST_LAST_TIME_OBJECT_COUNT) |
7220 #undef ADJUST_LAST_TIME_OBJECT_COUNT | 7226 #undef ADJUST_LAST_TIME_OBJECT_COUNT |
7221 | 7227 |
7222 memcpy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); | 7228 memcpy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); |
7223 memcpy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); | 7229 memcpy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); |
7224 ClearObjectStats(); | 7230 ClearObjectStats(); |
7225 } | 7231 } |
7226 | 7232 |
7227 } } // namespace v8::internal | 7233 } } // namespace v8::internal |
OLD | NEW |