OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 void Heap::PerformGarbageCollection(AllocationSpace space, | 555 void Heap::PerformGarbageCollection(AllocationSpace space, |
556 GarbageCollector collector, | 556 GarbageCollector collector, |
557 GCTracer* tracer) { | 557 GCTracer* tracer) { |
558 VerifySymbolTable(); | 558 VerifySymbolTable(); |
559 if (collector == MARK_COMPACTOR && global_gc_prologue_callback_) { | 559 if (collector == MARK_COMPACTOR && global_gc_prologue_callback_) { |
560 ASSERT(!allocation_allowed_); | 560 ASSERT(!allocation_allowed_); |
561 GCTracer::ExternalScope scope(tracer); | 561 GCTracer::ExternalScope scope(tracer); |
562 global_gc_prologue_callback_(); | 562 global_gc_prologue_callback_(); |
563 } | 563 } |
564 EnsureFromSpaceIsCommitted(); | 564 EnsureFromSpaceIsCommitted(); |
| 565 |
| 566 // Perform mark-sweep with optional compaction. |
565 if (collector == MARK_COMPACTOR) { | 567 if (collector == MARK_COMPACTOR) { |
566 MarkCompact(tracer); | 568 MarkCompact(tracer); |
| 569 } |
567 | 570 |
| 571 // Always perform a scavenge to make room in new space. |
| 572 Scavenge(); |
| 573 |
| 574 // Update the old space promotion limits after the scavenge due to |
| 575 // promotions during scavenge. |
| 576 if (collector == MARK_COMPACTOR) { |
568 int old_gen_size = PromotedSpaceSize(); | 577 int old_gen_size = PromotedSpaceSize(); |
569 old_gen_promotion_limit_ = | 578 old_gen_promotion_limit_ = |
570 old_gen_size + Max(kMinimumPromotionLimit, old_gen_size / 3); | 579 old_gen_size + Max(kMinimumPromotionLimit, old_gen_size / 3); |
571 old_gen_allocation_limit_ = | 580 old_gen_allocation_limit_ = |
572 old_gen_size + Max(kMinimumAllocationLimit, old_gen_size / 2); | 581 old_gen_size + Max(kMinimumAllocationLimit, old_gen_size / 2); |
573 old_gen_exhausted_ = false; | 582 old_gen_exhausted_ = false; |
574 } | 583 } |
575 Scavenge(); | |
576 | 584 |
577 Counters::objs_since_last_young.Set(0); | 585 Counters::objs_since_last_young.Set(0); |
578 | 586 |
579 if (collector == MARK_COMPACTOR) { | 587 if (collector == MARK_COMPACTOR) { |
580 DisableAssertNoAllocation allow_allocation; | 588 DisableAssertNoAllocation allow_allocation; |
581 GlobalHandles::PostGarbageCollectionProcessing(); | 589 GlobalHandles::PostGarbageCollectionProcessing(); |
582 } | 590 } |
583 | 591 |
584 // Update relocatables. | 592 // Update relocatables. |
585 Relocatable::PostGarbageCollectionProcessing(); | 593 Relocatable::PostGarbageCollectionProcessing(); |
(...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1666 return true; | 1674 return true; |
1667 } | 1675 } |
1668 | 1676 |
1669 | 1677 |
1670 Object* Heap::InitializeNumberStringCache() { | 1678 Object* Heap::InitializeNumberStringCache() { |
1671 // Compute the size of the number string cache based on the max heap size. | 1679 // Compute the size of the number string cache based on the max heap size. |
1672 // max_semispace_size_ == 512 KB => number_string_cache_size = 32. | 1680 // max_semispace_size_ == 512 KB => number_string_cache_size = 32. |
1673 // max_semispace_size_ == 8 MB => number_string_cache_size = 16KB. | 1681 // max_semispace_size_ == 8 MB => number_string_cache_size = 16KB. |
1674 int number_string_cache_size = max_semispace_size_ / 512; | 1682 int number_string_cache_size = max_semispace_size_ / 512; |
1675 number_string_cache_size = Max(32, Min(16*KB, number_string_cache_size)); | 1683 number_string_cache_size = Max(32, Min(16*KB, number_string_cache_size)); |
1676 Object* obj = AllocateFixedArray(number_string_cache_size * 2); | 1684 Object* obj = AllocateFixedArray(number_string_cache_size * 2, TENURED); |
1677 if (!obj->IsFailure()) set_number_string_cache(FixedArray::cast(obj)); | 1685 if (!obj->IsFailure()) set_number_string_cache(FixedArray::cast(obj)); |
1678 return obj; | 1686 return obj; |
1679 } | 1687 } |
1680 | 1688 |
1681 | 1689 |
1682 void Heap::FlushNumberStringCache() { | 1690 void Heap::FlushNumberStringCache() { |
1683 // Flush the number to string cache. | 1691 // Flush the number to string cache. |
1684 int len = number_string_cache()->length(); | 1692 int len = number_string_cache()->length(); |
1685 for (int i = 0; i < len; i++) { | 1693 for (int i = 0; i < len; i++) { |
1686 number_string_cache()->set_undefined(i); | 1694 number_string_cache()->set_undefined(i); |
(...skipping 2537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4224 void ExternalStringTable::TearDown() { | 4232 void ExternalStringTable::TearDown() { |
4225 new_space_strings_.Free(); | 4233 new_space_strings_.Free(); |
4226 old_space_strings_.Free(); | 4234 old_space_strings_.Free(); |
4227 } | 4235 } |
4228 | 4236 |
4229 | 4237 |
4230 List<Object*> ExternalStringTable::new_space_strings_; | 4238 List<Object*> ExternalStringTable::new_space_strings_; |
4231 List<Object*> ExternalStringTable::old_space_strings_; | 4239 List<Object*> ExternalStringTable::old_space_strings_; |
4232 | 4240 |
4233 } } // namespace v8::internal | 4241 } } // namespace v8::internal |
OLD | NEW |