SUGGESTED FIX
New suggested fix:
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
@@ -723,8 +723,9 @@ CMSCollector::CMSCollector(ConcurrentMar
// Support for parallelizing survivor space rescan
if (CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) {
- size_t max_plab_samples = cp->max_gen0_size()/
- ((SurvivorRatio+2)*MinTLABSize);
+ const size_t max_plab_samples =
+ ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize;
+
_survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads);
_survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples);
_cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads);
|
SUGGESTED FIX
Here's a hack. The real fix might want to be more hygienic and principled:-
diff -r 7bfd295ec074 src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Tue Dec 08 15:12:17 2009 -0800
+++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Mon Dec 14 14:45:10 2009 -0800
@@ -709,8 +709,11 @@ CMSCollector::CMSCollector(ConcurrentMar
// Support for parallelizing survivor space rescan
if (CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) {
- size_t max_plab_samples = cp->max_gen0_size()/
- ((SurvivorRatio+2)*MinTLABSize);
+ const size_t max_surv_size =
+ ((DefNewGeneration*)_young_gen)->
+ compute_survivor_size(_young_gen->max_capacity(),
+ cp->min_alignment());
+ const size_t max_plab_samples = max_surv_size/MinTLABSize;
_survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads);
_survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples);
_cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads);
diff -r 7bfd295ec074 src/share/vm/memory/defNewGeneration.hpp
--- a/src/share/vm/memory/defNewGeneration.hpp Tue Dec 08 15:12:17 2009 -0800
+++ b/src/share/vm/memory/defNewGeneration.hpp Mon Dec 14 14:45:10 2009 -0800
@@ -136,6 +136,7 @@ protected:
MinFreeScratchWords = 100
};
+ public: // Temporary
// Return the size of a survivor space if this generation were of size
// gen_size.
size_t compute_survivor_size(size_t gen_size, size_t alignment) const {
|