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(); |