--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp Mon Aug 31 05:27:29 2009 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp Wed Sep 02 00:04:29 2009 -0700
@@ -61,12 +61,16 @@
int size =
(SystemDictionary::number_of_classes() * 2) * 2 / ParallelGCThreads;
_revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray<Klass*>(size, true);
+ // From some experiments (#klass/k)^2 for k = 10 seems a better fit, but this will
+ // have to do for now until we are able to investigate a more optimal setting.
+ _revisit_mdo_stack = new (ResourceObj::C_HEAP) GrowableArray<DataLayout*>(size*2, true);
}
ParCompactionManager::~ParCompactionManager() {
delete _overflow_stack;
delete _revisit_klass_stack;
+ delete _revisit_mdo_stack;
// _manager_array and _stack_array are statics
// shared with all instances of ParCompactionManager
// should not be deallocated.
@@ -195,6 +199,7 @@
void ParCompactionManager::reset() {
for(uint i=0; i<ParallelGCThreads+1; i++) {
manager_array(i)->revisit_klass_stack()->clear();
+ manager_array(i)->revisit_mdo_stack()->clear();
}
}
@@ -296,6 +301,7 @@
#ifdef ASSERT
bool ParCompactionManager::stacks_have_been_allocated() {
- return (revisit_klass_stack()->data_addr() != NULL);
+ return (revisit_klass_stack()->data_addr() != NULL &&
+ revisit_mdo_stack()->data_addr() != NULL);
}
#endif