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