< prev index next >

src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp

Print this page




3582     _restart_addr = NULL;
3583     _markBitMap.iterate(&markFromRootsClosure, ra, _span.end());
3584   }
3585   return true;
3586 }
3587 
3588 void CMSCollector::preclean() {
3589   check_correct_thread_executing();
3590   assert(Thread::current()->is_ConcurrentGC_thread(), "Wrong thread");
3591   verify_work_stacks_empty();
3592   verify_overflow_empty();
3593   _abort_preclean = false;
3594   if (CMSPrecleaningEnabled) {
3595     if (!CMSEdenChunksRecordAlways) {
3596       _eden_chunk_index = 0;
3597     }
3598     size_t used = get_eden_used();
3599     size_t capacity = get_eden_capacity();
3600     // Don't start sampling unless we will get sufficiently
3601     // many samples.
3602     if (used < (capacity/(CMSScheduleRemarkSamplingRatio * 100)
3603                 * CMSScheduleRemarkEdenPenetration)) {
3604       _start_sampling = true;
3605     } else {
3606       _start_sampling = false;
3607     }
3608     GCTraceCPUTime tcpu;
3609     CMSPhaseAccounting pa(this, "Concurrent Preclean");
3610     preclean_work(CMSPrecleanRefLists1, CMSPrecleanSurvivors1);
3611   }
3612   CMSTokenSync x(true); // is cms thread
3613   if (CMSPrecleaningEnabled) {
3614     sample_eden();
3615     _collectorState = AbortablePreclean;
3616   } else {
3617     _collectorState = FinalMarking;
3618   }
3619   verify_work_stacks_empty();
3620   verify_overflow_empty();
3621 }
3622 




3582     _restart_addr = NULL;
3583     _markBitMap.iterate(&markFromRootsClosure, ra, _span.end());
3584   }
3585   return true;
3586 }
3587 
3588 void CMSCollector::preclean() {
3589   check_correct_thread_executing();
3590   assert(Thread::current()->is_ConcurrentGC_thread(), "Wrong thread");
3591   verify_work_stacks_empty();
3592   verify_overflow_empty();
3593   _abort_preclean = false;
3594   if (CMSPrecleaningEnabled) {
3595     if (!CMSEdenChunksRecordAlways) {
3596       _eden_chunk_index = 0;
3597     }
3598     size_t used = get_eden_used();
3599     size_t capacity = get_eden_capacity();
3600     // Don't start sampling unless we will get sufficiently
3601     // many samples.
3602     if (used < (capacity / CMSScheduleRemarkSamplingRatio / 100
3603                 * CMSScheduleRemarkEdenPenetration)) {
3604       _start_sampling = true;
3605     } else {
3606       _start_sampling = false;
3607     }
3608     GCTraceCPUTime tcpu;
3609     CMSPhaseAccounting pa(this, "Concurrent Preclean");
3610     preclean_work(CMSPrecleanRefLists1, CMSPrecleanSurvivors1);
3611   }
3612   CMSTokenSync x(true); // is cms thread
3613   if (CMSPrecleaningEnabled) {
3614     sample_eden();
3615     _collectorState = AbortablePreclean;
3616   } else {
3617     _collectorState = FinalMarking;
3618   }
3619   verify_work_stacks_empty();
3620   verify_overflow_empty();
3621 }
3622 


< prev index next >