< prev index next >

src/share/vm/gc/g1/concurrentMark.cpp

Print this page




2976     assert(task_card_bm->size() == _card_bm.size(), "size mismatch");
2977     assert(marked_bytes_array != NULL, "uninitialized");
2978 
2979     memset(marked_bytes_array, 0, (size_t) max_regions * sizeof(size_t));
2980     task_card_bm->clear();
2981   }
2982 }
2983 
2984 void ConcurrentMark::print_stats() {
2985   if (verbose_stats()) {
2986     gclog_or_tty->print_cr("---------------------------------------------------------------------");
2987     for (size_t i = 0; i < _active_tasks; ++i) {
2988       _tasks[i]->print_stats();
2989       gclog_or_tty->print_cr("---------------------------------------------------------------------");
2990     }
2991   }
2992 }
2993 
2994 // abandon current marking iteration due to a Full GC
2995 void ConcurrentMark::abort() {
2996   if (_has_aborted || !cmThread()->during_cycle()) {
2997     // We have already aborted or we never started a concurrent cycle. No need to do anything.
2998     return;
2999   }
3000 
3001   // Clear all marks in the next bitmap for the next marking cycle. This will allow us to skip the next
3002   // concurrent bitmap clearing.
3003   _nextMarkBitMap->clearAll();
3004 
3005   // Note we cannot clear the previous marking bitmap here
3006   // since VerifyDuringGC verifies the objects marked during
3007   // a full GC against the previous bitmap.
3008 
3009   // Clear the liveness counting data
3010   clear_all_count_data();
3011   // Empty mark stack
3012   reset_marking_state();
3013   for (uint i = 0; i < _max_worker_id; ++i) {
3014     _tasks[i]->clear_region_fields();
3015   }
3016   _first_overflow_barrier_sync.abort();
3017   _second_overflow_barrier_sync.abort();




2976     assert(task_card_bm->size() == _card_bm.size(), "size mismatch");
2977     assert(marked_bytes_array != NULL, "uninitialized");
2978 
2979     memset(marked_bytes_array, 0, (size_t) max_regions * sizeof(size_t));
2980     task_card_bm->clear();
2981   }
2982 }
2983 
2984 void ConcurrentMark::print_stats() {
2985   if (verbose_stats()) {
2986     gclog_or_tty->print_cr("---------------------------------------------------------------------");
2987     for (size_t i = 0; i < _active_tasks; ++i) {
2988       _tasks[i]->print_stats();
2989       gclog_or_tty->print_cr("---------------------------------------------------------------------");
2990     }
2991   }
2992 }
2993 
2994 // abandon current marking iteration due to a Full GC
2995 void ConcurrentMark::abort() {
2996   if (!cmThread()->during_cycle() || _has_aborted) {
2997     // We haven't started a concurrent cycle or we have already aborted it. No need to do anything.
2998     return;
2999   }
3000 
3001   // Clear all marks in the next bitmap for the next marking cycle. This will allow us to skip the next
3002   // concurrent bitmap clearing.
3003   _nextMarkBitMap->clearAll();
3004 
3005   // Note we cannot clear the previous marking bitmap here
3006   // since VerifyDuringGC verifies the objects marked during
3007   // a full GC against the previous bitmap.
3008 
3009   // Clear the liveness counting data
3010   clear_all_count_data();
3011   // Empty mark stack
3012   reset_marking_state();
3013   for (uint i = 0; i < _max_worker_id; ++i) {
3014     _tasks[i]->clear_region_fields();
3015   }
3016   _first_overflow_barrier_sync.abort();
3017   _second_overflow_barrier_sync.abort();


< prev index next >