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
|