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/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/once.h" | 10 #include "src/base/once.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 gc_count_(0), | 89 gc_count_(0), |
90 remembered_unmapped_pages_index_(0), | 90 remembered_unmapped_pages_index_(0), |
91 #ifdef DEBUG | 91 #ifdef DEBUG |
92 allocation_timeout_(0), | 92 allocation_timeout_(0), |
93 #endif // DEBUG | 93 #endif // DEBUG |
94 old_generation_allocation_limit_(initial_old_generation_size_), | 94 old_generation_allocation_limit_(initial_old_generation_size_), |
95 old_gen_exhausted_(false), | 95 old_gen_exhausted_(false), |
96 optimize_for_memory_usage_(false), | 96 optimize_for_memory_usage_(false), |
97 inline_allocation_disabled_(false), | 97 inline_allocation_disabled_(false), |
98 store_buffer_rebuilder_(store_buffer()), | 98 store_buffer_rebuilder_(store_buffer()), |
99 hidden_string_(NULL), | |
100 total_regexp_code_generated_(0), | 99 total_regexp_code_generated_(0), |
101 tracer_(this), | 100 tracer_(this), |
102 high_survival_rate_period_length_(0), | 101 high_survival_rate_period_length_(0), |
103 promoted_objects_size_(0), | 102 promoted_objects_size_(0), |
104 promotion_ratio_(0), | 103 promotion_ratio_(0), |
105 semi_space_copied_object_size_(0), | 104 semi_space_copied_object_size_(0), |
106 previous_semi_space_copied_object_size_(0), | 105 previous_semi_space_copied_object_size_(0), |
107 semi_space_copied_rate_(0), | 106 semi_space_copied_rate_(0), |
108 nodes_died_in_new_space_(0), | 107 nodes_died_in_new_space_(0), |
109 nodes_copied_in_new_space_(0), | 108 nodes_copied_in_new_space_(0), |
(...skipping 3110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3220 set_exception(*factory->NewOddball(factory->exception_map(), "exception", | 3219 set_exception(*factory->NewOddball(factory->exception_map(), "exception", |
3221 handle(Smi::FromInt(-5), isolate()), | 3220 handle(Smi::FromInt(-5), isolate()), |
3222 "undefined", Oddball::kException)); | 3221 "undefined", Oddball::kException)); |
3223 | 3222 |
3224 for (unsigned i = 0; i < arraysize(constant_string_table); i++) { | 3223 for (unsigned i = 0; i < arraysize(constant_string_table); i++) { |
3225 Handle<String> str = | 3224 Handle<String> str = |
3226 factory->InternalizeUtf8String(constant_string_table[i].contents); | 3225 factory->InternalizeUtf8String(constant_string_table[i].contents); |
3227 roots_[constant_string_table[i].index] = *str; | 3226 roots_[constant_string_table[i].index] = *str; |
3228 } | 3227 } |
3229 | 3228 |
| 3229 // The {hidden_string} is special because it is an empty string, but does not |
| 3230 // match any string (even the {empty_string}) when looked up in properties. |
3230 // Allocate the hidden string which is used to identify the hidden properties | 3231 // Allocate the hidden string which is used to identify the hidden properties |
3231 // in JSObjects. The hash code has a special value so that it will not match | 3232 // in JSObjects. The hash code has a special value so that it will not match |
3232 // the empty string when searching for the property. It cannot be part of the | 3233 // the empty string when searching for the property. It cannot be part of the |
3233 // loop above because it needs to be allocated manually with the special | 3234 // loop above because it needs to be allocated manually with the special |
3234 // hash code in place. The hash code for the hidden_string is zero to ensure | 3235 // hash code in place. The hash code for the hidden_string is zero to ensure |
3235 // that it will always be at the first entry in property descriptors. | 3236 // that it will always be at the first entry in property descriptors. |
3236 hidden_string_ = *factory->NewOneByteInternalizedString( | 3237 set_hidden_string(*factory->NewOneByteInternalizedString( |
3237 OneByteVector("", 0), String::kEmptyStringHash); | 3238 OneByteVector("", 0), String::kEmptyStringHash)); |
3238 | 3239 |
3239 // Create the code_stubs dictionary. The initial size is set to avoid | 3240 // Create the code_stubs dictionary. The initial size is set to avoid |
3240 // expanding the dictionary during bootstrapping. | 3241 // expanding the dictionary during bootstrapping. |
3241 set_code_stubs(*UnseededNumberDictionary::New(isolate(), 128)); | 3242 set_code_stubs(*UnseededNumberDictionary::New(isolate(), 128)); |
3242 | 3243 |
3243 // Create the non_monomorphic_cache used in stub-cache.cc. The initial size | 3244 // Create the non_monomorphic_cache used in stub-cache.cc. The initial size |
3244 // is set to avoid expanding the dictionary during bootstrapping. | 3245 // is set to avoid expanding the dictionary during bootstrapping. |
3245 set_non_monomorphic_cache(*UnseededNumberDictionary::New(isolate(), 64)); | 3246 set_non_monomorphic_cache(*UnseededNumberDictionary::New(isolate(), 64)); |
3246 | 3247 |
3247 set_polymorphic_code_cache(PolymorphicCodeCache::cast( | 3248 set_polymorphic_code_cache(PolymorphicCodeCache::cast( |
(...skipping 2000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5248 ExecutionAccess access(isolate()); | 5249 ExecutionAccess access(isolate()); |
5249 v->VisitPointers(&roots_[kSmiRootsStart], &roots_[kRootListLength]); | 5250 v->VisitPointers(&roots_[kSmiRootsStart], &roots_[kRootListLength]); |
5250 v->Synchronize(VisitorSynchronization::kSmiRootList); | 5251 v->Synchronize(VisitorSynchronization::kSmiRootList); |
5251 } | 5252 } |
5252 | 5253 |
5253 | 5254 |
5254 void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { | 5255 void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { |
5255 v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); | 5256 v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); |
5256 v->Synchronize(VisitorSynchronization::kStrongRootList); | 5257 v->Synchronize(VisitorSynchronization::kStrongRootList); |
5257 | 5258 |
5258 v->VisitPointer(bit_cast<Object**>(&hidden_string_)); | |
5259 v->Synchronize(VisitorSynchronization::kInternalizedString); | |
5260 | |
5261 isolate_->bootstrapper()->Iterate(v); | 5259 isolate_->bootstrapper()->Iterate(v); |
5262 v->Synchronize(VisitorSynchronization::kBootstrapper); | 5260 v->Synchronize(VisitorSynchronization::kBootstrapper); |
5263 isolate_->Iterate(v); | 5261 isolate_->Iterate(v); |
5264 v->Synchronize(VisitorSynchronization::kTop); | 5262 v->Synchronize(VisitorSynchronization::kTop); |
5265 Relocatable::Iterate(isolate_, v); | 5263 Relocatable::Iterate(isolate_, v); |
5266 v->Synchronize(VisitorSynchronization::kRelocatable); | 5264 v->Synchronize(VisitorSynchronization::kRelocatable); |
5267 | 5265 |
5268 if (isolate_->deoptimizer_data() != NULL) { | 5266 if (isolate_->deoptimizer_data() != NULL) { |
5269 isolate_->deoptimizer_data()->Iterate(v); | 5267 isolate_->deoptimizer_data()->Iterate(v); |
5270 } | 5268 } |
(...skipping 1634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6905 *object_type = "CODE_TYPE"; \ | 6903 *object_type = "CODE_TYPE"; \ |
6906 *object_sub_type = "CODE_AGE/" #name; \ | 6904 *object_sub_type = "CODE_AGE/" #name; \ |
6907 return true; | 6905 return true; |
6908 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) | 6906 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) |
6909 #undef COMPARE_AND_RETURN_NAME | 6907 #undef COMPARE_AND_RETURN_NAME |
6910 } | 6908 } |
6911 return false; | 6909 return false; |
6912 } | 6910 } |
6913 } // namespace internal | 6911 } // namespace internal |
6914 } // namespace v8 | 6912 } // namespace v8 |
OLD | NEW |