src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp

changeset 1376
8b46c4d82093
parent 905
ad8c8ca4ab0f
child 1383
89e0543e1737
     1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp	Mon Aug 31 05:27:29 2009 -0700
     1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp	Wed Sep 02 00:04:29 2009 -0700
     1.3 @@ -61,12 +61,16 @@
     1.4    int size =
     1.5      (SystemDictionary::number_of_classes() * 2) * 2 / ParallelGCThreads;
     1.6    _revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray<Klass*>(size, true);
     1.7 +  // From some experiments (#klass/k)^2 for k = 10 seems a better fit, but this will
     1.8 +  // have to do for now until we are able to investigate a more optimal setting.
     1.9 +  _revisit_mdo_stack = new (ResourceObj::C_HEAP) GrowableArray<DataLayout*>(size*2, true);
    1.10  
    1.11  }
    1.12  
    1.13  ParCompactionManager::~ParCompactionManager() {
    1.14    delete _overflow_stack;
    1.15    delete _revisit_klass_stack;
    1.16 +  delete _revisit_mdo_stack;
    1.17    // _manager_array and _stack_array are statics
    1.18    // shared with all instances of ParCompactionManager
    1.19    // should not be deallocated.
    1.20 @@ -195,6 +199,7 @@
    1.21  void ParCompactionManager::reset() {
    1.22    for(uint i=0; i<ParallelGCThreads+1; i++) {
    1.23      manager_array(i)->revisit_klass_stack()->clear();
    1.24 +    manager_array(i)->revisit_mdo_stack()->clear();
    1.25    }
    1.26  }
    1.27  
    1.28 @@ -296,6 +301,7 @@
    1.29  
    1.30  #ifdef ASSERT
    1.31  bool ParCompactionManager::stacks_have_been_allocated() {
    1.32 -  return (revisit_klass_stack()->data_addr() != NULL);
    1.33 +  return (revisit_klass_stack()->data_addr() != NULL &&
    1.34 +          revisit_mdo_stack()->data_addr() != NULL);
    1.35  }
    1.36  #endif

mercurial