| 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 288 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   299   if (FLAG_heap_stats) ReportHeapStatistics("After GC"); |   299   if (FLAG_heap_stats) ReportHeapStatistics("After GC"); | 
|   300 #elif defined(ENABLE_LOGGING_AND_PROFILING) |   300 #elif defined(ENABLE_LOGGING_AND_PROFILING) | 
|   301   if (FLAG_log_gc) new_space_.ReportStatistics(); |   301   if (FLAG_log_gc) new_space_.ReportStatistics(); | 
|   302 #endif |   302 #endif | 
|   303 } |   303 } | 
|   304 #endif  // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING) |   304 #endif  // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING) | 
|   305  |   305  | 
|   306  |   306  | 
|   307 void Heap::GarbageCollectionPrologue() { |   307 void Heap::GarbageCollectionPrologue() { | 
|   308   TranscendentalCache::Clear(); |   308   TranscendentalCache::Clear(); | 
 |   309   ClearJSFunctionResultCaches(); | 
|   309   gc_count_++; |   310   gc_count_++; | 
|   310   unflattened_strings_length_ = 0; |   311   unflattened_strings_length_ = 0; | 
|   311 #ifdef DEBUG |   312 #ifdef DEBUG | 
|   312   ASSERT(allocation_allowed_ && gc_state_ == NOT_IN_GC); |   313   ASSERT(allocation_allowed_ && gc_state_ == NOT_IN_GC); | 
|   313   allow_allocation(false); |   314   allow_allocation(false); | 
|   314  |   315  | 
|   315   if (FLAG_verify_heap) { |   316   if (FLAG_verify_heap) { | 
|   316     Verify(); |   317     Verify(); | 
|   317   } |   318   } | 
|   318  |   319  | 
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   534   // Try shrinking and try again. |   535   // Try shrinking and try again. | 
|   535   Shrink(); |   536   Shrink(); | 
|   536   if (new_space_.CommitFromSpaceIfNeeded()) return; |   537   if (new_space_.CommitFromSpaceIfNeeded()) return; | 
|   537  |   538  | 
|   538   // Committing memory to from space failed again. |   539   // Committing memory to from space failed again. | 
|   539   // Memory is exhausted and we will die. |   540   // Memory is exhausted and we will die. | 
|   540   V8::FatalProcessOutOfMemory("Committing semi space failed."); |   541   V8::FatalProcessOutOfMemory("Committing semi space failed."); | 
|   541 } |   542 } | 
|   542  |   543  | 
|   543  |   544  | 
 |   545 class ClearThreadJSFunctionResultCachesVisitor: public ThreadVisitor  { | 
 |   546   virtual void VisitThread(ThreadLocalTop* top) { | 
 |   547     Context* context = top->context_; | 
 |   548     if (context == NULL) return; | 
 |   549  | 
 |   550     FixedArray* caches = | 
 |   551       context->global()->global_context()->jsfunction_result_caches(); | 
 |   552     int length = caches->length(); | 
 |   553     for (int i = 0; i < length; i++) { | 
 |   554       JSFunctionResultCache::cast(caches->get(i))->Clear(); | 
 |   555     } | 
 |   556   } | 
 |   557 }; | 
 |   558  | 
 |   559  | 
 |   560 void Heap::ClearJSFunctionResultCaches() { | 
 |   561   if (Bootstrapper::IsActive()) return; | 
 |   562   ClearThreadJSFunctionResultCachesVisitor visitor; | 
 |   563   ThreadManager::IterateThreads(&visitor); | 
 |   564 } | 
 |   565  | 
 |   566  | 
|   544 void Heap::PerformGarbageCollection(AllocationSpace space, |   567 void Heap::PerformGarbageCollection(AllocationSpace space, | 
|   545                                     GarbageCollector collector, |   568                                     GarbageCollector collector, | 
|   546                                     GCTracer* tracer) { |   569                                     GCTracer* tracer) { | 
|   547   VerifySymbolTable(); |   570   VerifySymbolTable(); | 
|   548   if (collector == MARK_COMPACTOR && global_gc_prologue_callback_) { |   571   if (collector == MARK_COMPACTOR && global_gc_prologue_callback_) { | 
|   549     ASSERT(!allocation_allowed_); |   572     ASSERT(!allocation_allowed_); | 
|   550     GCTracer::ExternalScope scope(tracer); |   573     GCTracer::ExternalScope scope(tracer); | 
|   551     global_gc_prologue_callback_(); |   574     global_gc_prologue_callback_(); | 
|   552   } |   575   } | 
|   553  |   576  | 
| (...skipping 3810 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4364 void ExternalStringTable::TearDown() { |  4387 void ExternalStringTable::TearDown() { | 
|  4365   new_space_strings_.Free(); |  4388   new_space_strings_.Free(); | 
|  4366   old_space_strings_.Free(); |  4389   old_space_strings_.Free(); | 
|  4367 } |  4390 } | 
|  4368  |  4391  | 
|  4369  |  4392  | 
|  4370 List<Object*> ExternalStringTable::new_space_strings_; |  4393 List<Object*> ExternalStringTable::new_space_strings_; | 
|  4371 List<Object*> ExternalStringTable::old_space_strings_; |  4394 List<Object*> ExternalStringTable::old_space_strings_; | 
|  4372  |  4395  | 
|  4373 } }  // namespace v8::internal |  4396 } }  // namespace v8::internal | 
| OLD | NEW |