| 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/ast/context-slot-cache.h" | 9 #include "src/ast/context-slot-cache.h" |
| 10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
| (...skipping 5418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5429 store_buffer_ = new StoreBuffer(this); | 5429 store_buffer_ = new StoreBuffer(this); |
| 5430 | 5430 |
| 5431 // Initialize incremental marking. | 5431 // Initialize incremental marking. |
| 5432 incremental_marking_ = new IncrementalMarking(this); | 5432 incremental_marking_ = new IncrementalMarking(this); |
| 5433 | 5433 |
| 5434 for (int i = 0; i <= LAST_SPACE; i++) { | 5434 for (int i = 0; i <= LAST_SPACE; i++) { |
| 5435 space_[i] = nullptr; | 5435 space_[i] = nullptr; |
| 5436 } | 5436 } |
| 5437 | 5437 |
| 5438 space_[NEW_SPACE] = new_space_ = new NewSpace(this); | 5438 space_[NEW_SPACE] = new_space_ = new NewSpace(this); |
| 5439 if (new_space_ == nullptr) return false; | |
| 5440 | |
| 5441 // Set up new space. | |
| 5442 if (!new_space_->SetUp(initial_semispace_size_, max_semi_space_size_)) { | 5439 if (!new_space_->SetUp(initial_semispace_size_, max_semi_space_size_)) { |
| 5443 return false; | 5440 return false; |
| 5444 } | 5441 } |
| 5445 new_space_top_after_last_gc_ = new_space()->top(); | 5442 new_space_top_after_last_gc_ = new_space()->top(); |
| 5446 | 5443 |
| 5447 // Initialize old space. | |
| 5448 space_[OLD_SPACE] = old_space_ = | 5444 space_[OLD_SPACE] = old_space_ = |
| 5449 new OldSpace(this, OLD_SPACE, NOT_EXECUTABLE); | 5445 new OldSpace(this, OLD_SPACE, NOT_EXECUTABLE); |
| 5450 if (old_space_ == NULL) return false; | |
| 5451 if (!old_space_->SetUp()) return false; | 5446 if (!old_space_->SetUp()) return false; |
| 5452 | 5447 |
| 5453 // Initialize the code space, set its maximum capacity to the old | |
| 5454 // generation size. It needs executable memory. | |
| 5455 space_[CODE_SPACE] = code_space_ = new OldSpace(this, CODE_SPACE, EXECUTABLE); | 5448 space_[CODE_SPACE] = code_space_ = new OldSpace(this, CODE_SPACE, EXECUTABLE); |
| 5456 if (code_space_ == NULL) return false; | |
| 5457 if (!code_space_->SetUp()) return false; | 5449 if (!code_space_->SetUp()) return false; |
| 5458 | 5450 |
| 5459 // Initialize map space. | |
| 5460 space_[MAP_SPACE] = map_space_ = new MapSpace(this, MAP_SPACE); | 5451 space_[MAP_SPACE] = map_space_ = new MapSpace(this, MAP_SPACE); |
| 5461 if (map_space_ == NULL) return false; | |
| 5462 if (!map_space_->SetUp()) return false; | 5452 if (!map_space_->SetUp()) return false; |
| 5463 | 5453 |
| 5464 // The large object code space may contain code or data. We set the memory | 5454 // The large object code space may contain code or data. We set the memory |
| 5465 // to be non-executable here for safety, but this means we need to enable it | 5455 // to be non-executable here for safety, but this means we need to enable it |
| 5466 // explicitly when allocating large code objects. | 5456 // explicitly when allocating large code objects. |
| 5467 space_[LO_SPACE] = lo_space_ = new LargeObjectSpace(this, LO_SPACE); | 5457 space_[LO_SPACE] = lo_space_ = new LargeObjectSpace(this, LO_SPACE); |
| 5468 if (lo_space_ == NULL) return false; | |
| 5469 if (!lo_space_->SetUp()) return false; | 5458 if (!lo_space_->SetUp()) return false; |
| 5470 | 5459 |
| 5471 // Set up the seed that is used to randomize the string hash function. | 5460 // Set up the seed that is used to randomize the string hash function. |
| 5472 DCHECK(hash_seed() == 0); | 5461 DCHECK(hash_seed() == 0); |
| 5473 if (FLAG_randomize_hashes) { | 5462 if (FLAG_randomize_hashes) { |
| 5474 if (FLAG_hash_seed == 0) { | 5463 if (FLAG_hash_seed == 0) { |
| 5475 int rnd = isolate()->random_number_generator()->NextInt(); | 5464 int rnd = isolate()->random_number_generator()->NextInt(); |
| 5476 set_hash_seed(Smi::FromInt(rnd & Name::kHashBitMask)); | 5465 set_hash_seed(Smi::FromInt(rnd & Name::kHashBitMask)); |
| 5477 } else { | 5466 } else { |
| 5478 set_hash_seed(Smi::FromInt(FLAG_hash_seed)); | 5467 set_hash_seed(Smi::FromInt(FLAG_hash_seed)); |
| 5479 } | 5468 } |
| 5480 } | 5469 } |
| 5481 | 5470 |
| 5482 for (int i = 0; i < static_cast<int>(v8::Isolate::kUseCounterFeatureCount); | 5471 for (int i = 0; i < static_cast<int>(v8::Isolate::kUseCounterFeatureCount); |
| 5483 i++) { | 5472 i++) { |
| 5484 deferred_counters_[i] = 0; | 5473 deferred_counters_[i] = 0; |
| 5485 } | 5474 } |
| 5486 | 5475 |
| 5487 tracer_ = new GCTracer(this); | 5476 tracer_ = new GCTracer(this); |
| 5488 | |
| 5489 scavenge_collector_ = new Scavenger(this); | 5477 scavenge_collector_ = new Scavenger(this); |
| 5490 | |
| 5491 mark_compact_collector_ = new MarkCompactCollector(this); | 5478 mark_compact_collector_ = new MarkCompactCollector(this); |
| 5492 | |
| 5493 gc_idle_time_handler_ = new GCIdleTimeHandler(); | 5479 gc_idle_time_handler_ = new GCIdleTimeHandler(); |
| 5494 | |
| 5495 memory_reducer_ = new MemoryReducer(this); | 5480 memory_reducer_ = new MemoryReducer(this); |
| 5496 | |
| 5497 if (FLAG_track_gc_object_stats) { | 5481 if (FLAG_track_gc_object_stats) { |
| 5498 live_object_stats_ = new ObjectStats(this); | 5482 live_object_stats_ = new ObjectStats(this); |
| 5499 dead_object_stats_ = new ObjectStats(this); | 5483 dead_object_stats_ = new ObjectStats(this); |
| 5500 } | 5484 } |
| 5501 | |
| 5502 scavenge_job_ = new ScavengeJob(); | 5485 scavenge_job_ = new ScavengeJob(); |
| 5503 | 5486 |
| 5504 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); | 5487 LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity())); |
| 5505 LOG(isolate_, IntPtrTEvent("heap-available", Available())); | 5488 LOG(isolate_, IntPtrTEvent("heap-available", Available())); |
| 5506 | 5489 |
| 5507 store_buffer()->SetUp(); | 5490 store_buffer()->SetUp(); |
| 5508 | 5491 |
| 5509 mark_compact_collector()->SetUp(); | 5492 mark_compact_collector()->SetUp(); |
| 5510 | 5493 |
| 5511 idle_scavenge_observer_ = new IdleScavengeObserver( | 5494 idle_scavenge_observer_ = new IdleScavengeObserver( |
| (...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6484 } | 6467 } |
| 6485 | 6468 |
| 6486 | 6469 |
| 6487 // static | 6470 // static |
| 6488 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6471 int Heap::GetStaticVisitorIdForMap(Map* map) { |
| 6489 return StaticVisitorBase::GetVisitorId(map); | 6472 return StaticVisitorBase::GetVisitorId(map); |
| 6490 } | 6473 } |
| 6491 | 6474 |
| 6492 } // namespace internal | 6475 } // namespace internal |
| 6493 } // namespace v8 | 6476 } // namespace v8 |
| OLD | NEW |