3255 // Clear the liveness counting data
3256 clear_all_count_data();
3257 // Empty mark stack
3258 reset_marking_state();
3259 for (uint i = 0; i < _max_worker_id; ++i) {
3260 _tasks[i]->clear_region_fields();
3261 }
3262 _first_overflow_barrier_sync.abort();
3263 _second_overflow_barrier_sync.abort();
3264 _has_aborted = true;
3265
3266 SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
3267 satb_mq_set.abandon_partial_marking();
3268 // This can be called either during or outside marking, we'll read
3269 // the expected_active value from the SATB queue set.
3270 satb_mq_set.set_active_all_threads(
3271 false, /* new active value */
3272 satb_mq_set.is_active() /* expected_active */);
3273
3274 _g1h->trace_heap_after_concurrent_cycle();
3275 _g1h->register_concurrent_cycle_end();
3276 }
3277
3278 static void print_ms_time_info(const char* prefix, const char* name,
3279 NumberSeq& ns) {
3280 gclog_or_tty->print_cr("%s%5d %12s: total time = %8.2f s (avg = %8.2f ms).",
3281 prefix, ns.num(), name, ns.sum()/1000.0, ns.avg());
3282 if (ns.num() > 0) {
3283 gclog_or_tty->print_cr("%s [std. dev = %8.2f ms, max = %8.2f ms]",
3284 prefix, ns.sd(), ns.maximum());
3285 }
3286 }
3287
3288 void ConcurrentMark::print_summary_info() {
3289 gclog_or_tty->print_cr(" Concurrent marking:");
3290 print_ms_time_info(" ", "init marks", _init_times);
3291 print_ms_time_info(" ", "remarks", _remark_times);
3292 {
3293 print_ms_time_info(" ", "final marks", _remark_mark_times);
3294 print_ms_time_info(" ", "weak refs", _remark_weak_ref_times);
3295
|
3255 // Clear the liveness counting data
3256 clear_all_count_data();
3257 // Empty mark stack
3258 reset_marking_state();
3259 for (uint i = 0; i < _max_worker_id; ++i) {
3260 _tasks[i]->clear_region_fields();
3261 }
3262 _first_overflow_barrier_sync.abort();
3263 _second_overflow_barrier_sync.abort();
3264 _has_aborted = true;
3265
3266 SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
3267 satb_mq_set.abandon_partial_marking();
3268 // This can be called either during or outside marking, we'll read
3269 // the expected_active value from the SATB queue set.
3270 satb_mq_set.set_active_all_threads(
3271 false, /* new active value */
3272 satb_mq_set.is_active() /* expected_active */);
3273
3274 _g1h->trace_heap_after_concurrent_cycle();
3275 }
3276
3277 static void print_ms_time_info(const char* prefix, const char* name,
3278 NumberSeq& ns) {
3279 gclog_or_tty->print_cr("%s%5d %12s: total time = %8.2f s (avg = %8.2f ms).",
3280 prefix, ns.num(), name, ns.sum()/1000.0, ns.avg());
3281 if (ns.num() > 0) {
3282 gclog_or_tty->print_cr("%s [std. dev = %8.2f ms, max = %8.2f ms]",
3283 prefix, ns.sd(), ns.maximum());
3284 }
3285 }
3286
3287 void ConcurrentMark::print_summary_info() {
3288 gclog_or_tty->print_cr(" Concurrent marking:");
3289 print_ms_time_info(" ", "init marks", _init_times);
3290 print_ms_time_info(" ", "remarks", _remark_times);
3291 {
3292 print_ms_time_info(" ", "final marks", _remark_mark_times);
3293 print_ms_time_info(" ", "weak refs", _remark_weak_ref_times);
3294
|