735 assert(_eden_chunk_array != NULL || _eden_chunk_capacity == 0, "Error"); |
735 assert(_eden_chunk_array != NULL || _eden_chunk_capacity == 0, "Error"); |
736 |
736 |
737 // Support for parallelizing survivor space rescan |
737 // Support for parallelizing survivor space rescan |
738 if ((CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) || CMSParallelInitialMarkEnabled) { |
738 if ((CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) || CMSParallelInitialMarkEnabled) { |
739 const size_t max_plab_samples = |
739 const size_t max_plab_samples = |
740 ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize; |
740 ((DefNewGeneration*)_young_gen)->max_survivor_size() / plab_sample_minimum_size(); |
741 |
741 |
742 _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads, mtGC); |
742 _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads, mtGC); |
743 _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples, mtGC); |
743 _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples, mtGC); |
744 _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads, mtGC); |
744 _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads, mtGC); |
745 if (_survivor_plab_array == NULL || _survivor_chunk_array == NULL |
745 if (_survivor_plab_array == NULL || _survivor_chunk_array == NULL |
791 |
791 |
792 NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;) |
792 NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;) |
793 _gc_counters = new CollectorCounters("CMS", 1); |
793 _gc_counters = new CollectorCounters("CMS", 1); |
794 _completed_initialization = true; |
794 _completed_initialization = true; |
795 _inter_sweep_timer.start(); // start of time |
795 _inter_sweep_timer.start(); // start of time |
|
796 } |
|
797 |
|
798 size_t CMSCollector::plab_sample_minimum_size() { |
|
799 // The default value of MinTLABSize is 2k, but there is |
|
800 // no way to get the default value if the flag has been overridden. |
|
801 return MAX2(ThreadLocalAllocBuffer::min_size() * HeapWordSize, 2 * K); |
796 } |
802 } |
797 |
803 |
798 const char* ConcurrentMarkSweepGeneration::name() const { |
804 const char* ConcurrentMarkSweepGeneration::name() const { |
799 return "concurrent mark-sweep generation"; |
805 return "concurrent mark-sweep generation"; |
800 } |
806 } |