< prev index next >

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

Print this page




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




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


< prev index next >