Mercurial > hg > truffle
diff src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp @ 941:8b46c4d82093
4957990: Perm heap bloat in JVM
Summary: Treat ProfileData in MDO's as a source of weak, not strong, roots. Fixes the bug for stop-world collection -- the case of concurrent collection will be fixed separately.
Reviewed-by: jcoomes, jmasa, kvn, never
author | ysr |
---|---|
date | Wed, 02 Sep 2009 00:04:29 -0700 |
parents | ad8c8ca4ab0f |
children | 89e0543e1737 |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp Mon Aug 31 05:27:29 2009 -0700 +++ b/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