Chromium Code Reviews| 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/heap.h" | 5 #include "src/heap/heap.h" |
| 6 | 6 |
| 7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/api.h" | 8 #include "src/api.h" |
| 9 #include "src/assembler-inl.h" | 9 #include "src/assembler-inl.h" |
| 10 #include "src/ast/context-slot-cache.h" | 10 #include "src/ast/context-slot-cache.h" |
| (...skipping 1231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1242 | 1242 |
| 1243 void Heap::EnsureFromSpaceIsCommitted() { | 1243 void Heap::EnsureFromSpaceIsCommitted() { |
| 1244 if (new_space_->CommitFromSpaceIfNeeded()) return; | 1244 if (new_space_->CommitFromSpaceIfNeeded()) return; |
| 1245 | 1245 |
| 1246 // Committing memory to from space failed. | 1246 // Committing memory to from space failed. |
| 1247 // Memory is exhausted and we will die. | 1247 // Memory is exhausted and we will die. |
| 1248 V8::FatalProcessOutOfMemory("Committing semi space failed."); | 1248 V8::FatalProcessOutOfMemory("Committing semi space failed."); |
| 1249 } | 1249 } |
| 1250 | 1250 |
| 1251 | 1251 |
| 1252 void Heap::ClearNormalizedMapCaches() { | |
| 1253 if (isolate_->bootstrapper()->IsActive() && | |
|
ulan
2017/03/13 14:36:01
I don't understand the intent of this condition. W
| |
| 1254 !incremental_marking()->IsMarking()) { | |
| 1255 return; | |
| 1256 } | |
| 1257 | |
| 1258 Object* context = native_contexts_list(); | |
| 1259 while (!context->IsUndefined(isolate())) { | |
| 1260 // GC can happen when the context is not fully initialized, | |
| 1261 // so the cache can be undefined. | |
| 1262 Object* cache = | |
| 1263 Context::cast(context)->get(Context::NORMALIZED_MAP_CACHE_INDEX); | |
| 1264 if (!cache->IsUndefined(isolate())) { | |
| 1265 NormalizedMapCache::cast(cache)->Clear(); | |
| 1266 } | |
| 1267 context = Context::cast(context)->next_context_link(); | |
| 1268 } | |
| 1269 } | |
| 1270 | |
| 1271 | |
| 1272 void Heap::UpdateSurvivalStatistics(int start_new_space_size) { | 1252 void Heap::UpdateSurvivalStatistics(int start_new_space_size) { |
| 1273 if (start_new_space_size == 0) return; | 1253 if (start_new_space_size == 0) return; |
| 1274 | 1254 |
| 1275 promotion_ratio_ = (static_cast<double>(promoted_objects_size_) / | 1255 promotion_ratio_ = (static_cast<double>(promoted_objects_size_) / |
| 1276 static_cast<double>(start_new_space_size) * 100); | 1256 static_cast<double>(start_new_space_size) * 100); |
| 1277 | 1257 |
| 1278 if (previous_semi_space_copied_object_size_ > 0) { | 1258 if (previous_semi_space_copied_object_size_ > 0) { |
| 1279 promotion_rate_ = | 1259 promotion_rate_ = |
| 1280 (static_cast<double>(promoted_objects_size_) / | 1260 (static_cast<double>(promoted_objects_size_) / |
| 1281 static_cast<double>(previous_semi_space_copied_object_size_) * 100); | 1261 static_cast<double>(previous_semi_space_copied_object_size_) * 100); |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1503 isolate_->context_slot_cache()->Clear(); | 1483 isolate_->context_slot_cache()->Clear(); |
| 1504 isolate_->descriptor_lookup_cache()->Clear(); | 1484 isolate_->descriptor_lookup_cache()->Clear(); |
| 1505 RegExpResultsCache::Clear(string_split_cache()); | 1485 RegExpResultsCache::Clear(string_split_cache()); |
| 1506 RegExpResultsCache::Clear(regexp_multiple_cache()); | 1486 RegExpResultsCache::Clear(regexp_multiple_cache()); |
| 1507 | 1487 |
| 1508 isolate_->compilation_cache()->MarkCompactPrologue(); | 1488 isolate_->compilation_cache()->MarkCompactPrologue(); |
| 1509 | 1489 |
| 1510 CompletelyClearInstanceofCache(); | 1490 CompletelyClearInstanceofCache(); |
| 1511 | 1491 |
| 1512 FlushNumberStringCache(); | 1492 FlushNumberStringCache(); |
| 1513 ClearNormalizedMapCaches(); | |
| 1514 } | 1493 } |
| 1515 | 1494 |
| 1516 | 1495 |
| 1517 void Heap::CheckNewSpaceExpansionCriteria() { | 1496 void Heap::CheckNewSpaceExpansionCriteria() { |
| 1518 if (FLAG_experimental_new_space_growth_heuristic) { | 1497 if (FLAG_experimental_new_space_growth_heuristic) { |
| 1519 if (new_space_->TotalCapacity() < new_space_->MaximumCapacity() && | 1498 if (new_space_->TotalCapacity() < new_space_->MaximumCapacity() && |
| 1520 survived_last_scavenge_ * 100 / new_space_->TotalCapacity() >= 10) { | 1499 survived_last_scavenge_ * 100 / new_space_->TotalCapacity() >= 10) { |
| 1521 // Grow the size of new space if there is room to grow, and more than 10% | 1500 // Grow the size of new space if there is room to grow, and more than 10% |
| 1522 // have survived the last scavenge. | 1501 // have survived the last scavenge. |
| 1523 new_space_->Grow(); | 1502 new_space_->Grow(); |
| (...skipping 4850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6374 } | 6353 } |
| 6375 | 6354 |
| 6376 | 6355 |
| 6377 // static | 6356 // static |
| 6378 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6357 int Heap::GetStaticVisitorIdForMap(Map* map) { |
| 6379 return StaticVisitorBase::GetVisitorId(map); | 6358 return StaticVisitorBase::GetVisitorId(map); |
| 6380 } | 6359 } |
| 6381 | 6360 |
| 6382 } // namespace internal | 6361 } // namespace internal |
| 6383 } // namespace v8 | 6362 } // namespace v8 |
| OLD | NEW |