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
|