rev 2891 : 7120038: G1: ParallelGCThreads==0 is broken
Summary: Running G1 with ParallelGCThreads==0 results in various crashes and asserts. Most of these are caused by unguarded references to the worker threads array or an incorrect number of active workers.
Reviewed-by:

   1 /*
   2  * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/symbolTable.hpp"
  27 #include "gc_implementation/g1/concurrentMark.inline.hpp"
  28 #include "gc_implementation/g1/concurrentMarkThread.inline.hpp"
  29 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
  30 #include "gc_implementation/g1/g1CollectorPolicy.hpp"
  31 #include "gc_implementation/g1/g1ErgoVerbose.hpp"
  32 #include "gc_implementation/g1/g1OopClosures.inline.hpp"
  33 #include "gc_implementation/g1/g1RemSet.hpp"
  34 #include "gc_implementation/g1/heapRegionRemSet.hpp"
  35 #include "gc_implementation/g1/heapRegionSeq.inline.hpp"
  36 #include "gc_implementation/shared/vmGCOperations.hpp"
  37 #include "memory/genOopClosures.inline.hpp"
  38 #include "memory/referencePolicy.hpp"
  39 #include "memory/resourceArea.hpp"
  40 #include "oops/oop.inline.hpp"
  41 #include "runtime/handles.inline.hpp"
  42 #include "runtime/java.hpp"
  43 
  44 //
  45 // CMS Bit Map Wrapper
  46 
  47 CMBitMapRO::CMBitMapRO(ReservedSpace rs, int shifter) :
  48   _bm((uintptr_t*)NULL,0),
  49   _shifter(shifter) {
  50   _bmStartWord = (HeapWord*)(rs.base());
  51   _bmWordSize  = rs.size()/HeapWordSize;    // rs.size() is in bytes
  52   ReservedSpace brs(ReservedSpace::allocation_align_size_up(
  53                      (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1));
  54 
  55   guarantee(brs.is_reserved(), "couldn't allocate CMS bit map");
  56   // For now we'll just commit all of the bit map up fromt.
  57   // Later on we'll try to be more parsimonious with swap.
  58   guarantee(_virtual_space.initialize(brs, brs.size()),
  59             "couldn't reseve backing store for CMS bit map");
  60   assert(_virtual_space.committed_size() == brs.size(),
  61          "didn't reserve backing store for all of CMS bit map?");
  62   _bm.set_map((uintptr_t*)_virtual_space.low());
  63   assert(_virtual_space.committed_size() << (_shifter + LogBitsPerByte) >=
  64          _bmWordSize, "inconsistency in bit map sizing");
  65   _bm.set_size(_bmWordSize >> _shifter);
  66 }
  67 
  68 HeapWord* CMBitMapRO::getNextMarkedWordAddress(HeapWord* addr,
  69                                                HeapWord* limit) const {
  70   // First we must round addr *up* to a possible object boundary.
  71   addr = (HeapWord*)align_size_up((intptr_t)addr,
  72                                   HeapWordSize << _shifter);
  73   size_t addrOffset = heapWordToOffset(addr);
  74   if (limit == NULL) {
  75     limit = _bmStartWord + _bmWordSize;
  76   }
  77   size_t limitOffset = heapWordToOffset(limit);
  78   size_t nextOffset = _bm.get_next_one_offset(addrOffset, limitOffset);
  79   HeapWord* nextAddr = offsetToHeapWord(nextOffset);
  80   assert(nextAddr >= addr, "get_next_one postcondition");
  81   assert(nextAddr == limit || isMarked(nextAddr),
  82          "get_next_one postcondition");
  83   return nextAddr;
  84 }
  85 
  86 HeapWord* CMBitMapRO::getNextUnmarkedWordAddress(HeapWord* addr,
  87                                                  HeapWord* limit) const {
  88   size_t addrOffset = heapWordToOffset(addr);
  89   if (limit == NULL) {
  90     limit = _bmStartWord + _bmWordSize;
  91   }
  92   size_t limitOffset = heapWordToOffset(limit);
  93   size_t nextOffset = _bm.get_next_zero_offset(addrOffset, limitOffset);
  94   HeapWord* nextAddr = offsetToHeapWord(nextOffset);
  95   assert(nextAddr >= addr, "get_next_one postcondition");
  96   assert(nextAddr == limit || !isMarked(nextAddr),
  97          "get_next_one postcondition");
  98   return nextAddr;
  99 }
 100 
 101 int CMBitMapRO::heapWordDiffToOffsetDiff(size_t diff) const {
 102   assert((diff & ((1 << _shifter) - 1)) == 0, "argument check");
 103   return (int) (diff >> _shifter);
 104 }
 105 
 106 bool CMBitMapRO::iterate(BitMapClosure* cl, MemRegion mr) {
 107   HeapWord* left  = MAX2(_bmStartWord, mr.start());
 108   HeapWord* right = MIN2(_bmStartWord + _bmWordSize, mr.end());
 109   if (right > left) {
 110     // Right-open interval [leftOffset, rightOffset).
 111     return _bm.iterate(cl, heapWordToOffset(left), heapWordToOffset(right));
 112   } else {
 113     return true;
 114   }
 115 }
 116 
 117 void CMBitMapRO::mostly_disjoint_range_union(BitMap*   from_bitmap,
 118                                              size_t    from_start_index,
 119                                              HeapWord* to_start_word,
 120                                              size_t    word_num) {
 121   _bm.mostly_disjoint_range_union(from_bitmap,
 122                                   from_start_index,
 123                                   heapWordToOffset(to_start_word),
 124                                   word_num);
 125 }
 126 
 127 #ifndef PRODUCT
 128 bool CMBitMapRO::covers(ReservedSpace rs) const {
 129   // assert(_bm.map() == _virtual_space.low(), "map inconsistency");
 130   assert(((size_t)_bm.size() * (size_t)(1 << _shifter)) == _bmWordSize,
 131          "size inconsistency");
 132   return _bmStartWord == (HeapWord*)(rs.base()) &&
 133          _bmWordSize  == rs.size()>>LogHeapWordSize;
 134 }
 135 #endif
 136 
 137 void CMBitMap::clearAll() {
 138   _bm.clear();
 139   return;
 140 }
 141 
 142 void CMBitMap::markRange(MemRegion mr) {
 143   mr.intersection(MemRegion(_bmStartWord, _bmWordSize));
 144   assert(!mr.is_empty(), "unexpected empty region");
 145   assert((offsetToHeapWord(heapWordToOffset(mr.end())) ==
 146           ((HeapWord *) mr.end())),
 147          "markRange memory region end is not card aligned");
 148   // convert address range into offset range
 149   _bm.at_put_range(heapWordToOffset(mr.start()),
 150                    heapWordToOffset(mr.end()), true);
 151 }
 152 
 153 void CMBitMap::clearRange(MemRegion mr) {
 154   mr.intersection(MemRegion(_bmStartWord, _bmWordSize));
 155   assert(!mr.is_empty(), "unexpected empty region");
 156   // convert address range into offset range
 157   _bm.at_put_range(heapWordToOffset(mr.start()),
 158                    heapWordToOffset(mr.end()), false);
 159 }
 160 
 161 MemRegion CMBitMap::getAndClearMarkedRegion(HeapWord* addr,
 162                                             HeapWord* end_addr) {
 163   HeapWord* start = getNextMarkedWordAddress(addr);
 164   start = MIN2(start, end_addr);
 165   HeapWord* end   = getNextUnmarkedWordAddress(start);
 166   end = MIN2(end, end_addr);
 167   assert(start <= end, "Consistency check");
 168   MemRegion mr(start, end);
 169   if (!mr.is_empty()) {
 170     clearRange(mr);
 171   }
 172   return mr;
 173 }
 174 
 175 CMMarkStack::CMMarkStack(ConcurrentMark* cm) :
 176   _base(NULL), _cm(cm)
 177 #ifdef ASSERT
 178   , _drain_in_progress(false)
 179   , _drain_in_progress_yields(false)
 180 #endif
 181 {}
 182 
 183 void CMMarkStack::allocate(size_t size) {
 184   _base = NEW_C_HEAP_ARRAY(oop, size);
 185   if (_base == NULL) {
 186     vm_exit_during_initialization("Failed to allocate "
 187                                   "CM region mark stack");
 188   }
 189   _index = 0;
 190   _capacity = (jint) size;
 191   _oops_do_bound = -1;
 192   NOT_PRODUCT(_max_depth = 0);
 193 }
 194 
 195 CMMarkStack::~CMMarkStack() {
 196   if (_base != NULL) {
 197     FREE_C_HEAP_ARRAY(oop, _base);
 198   }
 199 }
 200 
 201 void CMMarkStack::par_push(oop ptr) {
 202   while (true) {
 203     if (isFull()) {
 204       _overflow = true;
 205       return;
 206     }
 207     // Otherwise...
 208     jint index = _index;
 209     jint next_index = index+1;
 210     jint res = Atomic::cmpxchg(next_index, &_index, index);
 211     if (res == index) {
 212       _base[index] = ptr;
 213       // Note that we don't maintain this atomically.  We could, but it
 214       // doesn't seem necessary.
 215       NOT_PRODUCT(_max_depth = MAX2(_max_depth, next_index));
 216       return;
 217     }
 218     // Otherwise, we need to try again.
 219   }
 220 }
 221 
 222 void CMMarkStack::par_adjoin_arr(oop* ptr_arr, int n) {
 223   while (true) {
 224     if (isFull()) {
 225       _overflow = true;
 226       return;
 227     }
 228     // Otherwise...
 229     jint index = _index;
 230     jint next_index = index + n;
 231     if (next_index > _capacity) {
 232       _overflow = true;
 233       return;
 234     }
 235     jint res = Atomic::cmpxchg(next_index, &_index, index);
 236     if (res == index) {
 237       for (int i = 0; i < n; i++) {
 238         int ind = index + i;
 239         assert(ind < _capacity, "By overflow test above.");
 240         _base[ind] = ptr_arr[i];
 241       }
 242       NOT_PRODUCT(_max_depth = MAX2(_max_depth, next_index));
 243       return;
 244     }
 245     // Otherwise, we need to try again.
 246   }
 247 }
 248 
 249 
 250 void CMMarkStack::par_push_arr(oop* ptr_arr, int n) {
 251   MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
 252   jint start = _index;
 253   jint next_index = start + n;
 254   if (next_index > _capacity) {
 255     _overflow = true;
 256     return;
 257   }
 258   // Otherwise.
 259   _index = next_index;
 260   for (int i = 0; i < n; i++) {
 261     int ind = start + i;
 262     assert(ind < _capacity, "By overflow test above.");
 263     _base[ind] = ptr_arr[i];
 264   }
 265 }
 266 
 267 
 268 bool CMMarkStack::par_pop_arr(oop* ptr_arr, int max, int* n) {
 269   MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
 270   jint index = _index;
 271   if (index == 0) {
 272     *n = 0;
 273     return false;
 274   } else {
 275     int k = MIN2(max, index);
 276     jint new_ind = index - k;
 277     for (int j = 0; j < k; j++) {
 278       ptr_arr[j] = _base[new_ind + j];
 279     }
 280     _index = new_ind;
 281     *n = k;
 282     return true;
 283   }
 284 }
 285 
 286 
 287 CMRegionStack::CMRegionStack() : _base(NULL) {}
 288 
 289 void CMRegionStack::allocate(size_t size) {
 290   _base = NEW_C_HEAP_ARRAY(MemRegion, size);
 291   if (_base == NULL) {
 292     vm_exit_during_initialization("Failed to allocate CM region mark stack");
 293   }
 294   _index = 0;
 295   _capacity = (jint) size;
 296 }
 297 
 298 CMRegionStack::~CMRegionStack() {
 299   if (_base != NULL) {
 300     FREE_C_HEAP_ARRAY(oop, _base);
 301   }
 302 }
 303 
 304 void CMRegionStack::push_lock_free(MemRegion mr) {
 305   assert(mr.word_size() > 0, "Precondition");
 306   while (true) {
 307     jint index = _index;
 308 
 309     if (index >= _capacity) {
 310       _overflow = true;
 311       return;
 312     }
 313     // Otherwise...
 314     jint next_index = index+1;
 315     jint res = Atomic::cmpxchg(next_index, &_index, index);
 316     if (res == index) {
 317       _base[index] = mr;
 318       return;
 319     }
 320     // Otherwise, we need to try again.
 321   }
 322 }
 323 
 324 // Lock-free pop of the region stack. Called during the concurrent
 325 // marking / remark phases. Should only be called in tandem with
 326 // other lock-free pops.
 327 MemRegion CMRegionStack::pop_lock_free() {
 328   while (true) {
 329     jint index = _index;
 330 
 331     if (index == 0) {
 332       return MemRegion();
 333     }
 334     // Otherwise...
 335     jint next_index = index-1;
 336     jint res = Atomic::cmpxchg(next_index, &_index, index);
 337     if (res == index) {
 338       MemRegion mr = _base[next_index];
 339       if (mr.start() != NULL) {
 340         assert(mr.end() != NULL, "invariant");
 341         assert(mr.word_size() > 0, "invariant");
 342         return mr;
 343       } else {
 344         // that entry was invalidated... let's skip it
 345         assert(mr.end() == NULL, "invariant");
 346       }
 347     }
 348     // Otherwise, we need to try again.
 349   }
 350 }
 351 
 352 #if 0
 353 // The routines that manipulate the region stack with a lock are
 354 // not currently used. They should be retained, however, as a
 355 // diagnostic aid.
 356 
 357 void CMRegionStack::push_with_lock(MemRegion mr) {
 358   assert(mr.word_size() > 0, "Precondition");
 359   MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
 360 
 361   if (isFull()) {
 362     _overflow = true;
 363     return;
 364   }
 365 
 366   _base[_index] = mr;
 367   _index += 1;
 368 }
 369 
 370 MemRegion CMRegionStack::pop_with_lock() {
 371   MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
 372 
 373   while (true) {
 374     if (_index == 0) {
 375       return MemRegion();
 376     }
 377     _index -= 1;
 378 
 379     MemRegion mr = _base[_index];
 380     if (mr.start() != NULL) {
 381       assert(mr.end() != NULL, "invariant");
 382       assert(mr.word_size() > 0, "invariant");
 383       return mr;
 384     } else {
 385       // that entry was invalidated... let's skip it
 386       assert(mr.end() == NULL, "invariant");
 387     }
 388   }
 389 }
 390 #endif
 391 
 392 bool CMRegionStack::invalidate_entries_into_cset() {
 393   bool result = false;
 394   G1CollectedHeap* g1h = G1CollectedHeap::heap();
 395   for (int i = 0; i < _oops_do_bound; ++i) {
 396     MemRegion mr = _base[i];
 397     if (mr.start() != NULL) {
 398       assert(mr.end() != NULL, "invariant");
 399       assert(mr.word_size() > 0, "invariant");
 400       HeapRegion* hr = g1h->heap_region_containing(mr.start());
 401       assert(hr != NULL, "invariant");
 402       if (hr->in_collection_set()) {
 403         // The region points into the collection set
 404         _base[i] = MemRegion();
 405         result = true;
 406       }
 407     } else {
 408       // that entry was invalidated... let's skip it
 409       assert(mr.end() == NULL, "invariant");
 410     }
 411   }
 412   return result;
 413 }
 414 
 415 template<class OopClosureClass>
 416 bool CMMarkStack::drain(OopClosureClass* cl, CMBitMap* bm, bool yield_after) {
 417   assert(!_drain_in_progress || !_drain_in_progress_yields || yield_after
 418          || SafepointSynchronize::is_at_safepoint(),
 419          "Drain recursion must be yield-safe.");
 420   bool res = true;
 421   debug_only(_drain_in_progress = true);
 422   debug_only(_drain_in_progress_yields = yield_after);
 423   while (!isEmpty()) {
 424     oop newOop = pop();
 425     assert(G1CollectedHeap::heap()->is_in_reserved(newOop), "Bad pop");
 426     assert(newOop->is_oop(), "Expected an oop");
 427     assert(bm == NULL || bm->isMarked((HeapWord*)newOop),
 428            "only grey objects on this stack");
 429     // iterate over the oops in this oop, marking and pushing
 430     // the ones in CMS generation.
 431     newOop->oop_iterate(cl);
 432     if (yield_after && _cm->do_yield_check()) {
 433       res = false;
 434       break;
 435     }
 436   }
 437   debug_only(_drain_in_progress = false);
 438   return res;
 439 }
 440 
 441 void CMMarkStack::oops_do(OopClosure* f) {
 442   if (_index == 0) return;
 443   assert(_oops_do_bound != -1 && _oops_do_bound <= _index,
 444          "Bound must be set.");
 445   for (int i = 0; i < _oops_do_bound; i++) {
 446     f->do_oop(&_base[i]);
 447   }
 448   _oops_do_bound = -1;
 449 }
 450 
 451 bool ConcurrentMark::not_yet_marked(oop obj) const {
 452   return (_g1h->is_obj_ill(obj)
 453           || (_g1h->is_in_permanent(obj)
 454               && !nextMarkBitMap()->isMarked((HeapWord*)obj)));
 455 }
 456 
 457 #ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away
 458 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
 459 #endif // _MSC_VER
 460 
 461 size_t ConcurrentMark::scale_parallel_threads(size_t n_par_threads) {
 462   return MAX2((n_par_threads + 2) / 4, (size_t)1);
 463 }
 464 
 465 ConcurrentMark::ConcurrentMark(ReservedSpace rs,
 466                                int max_regions) :
 467   _markBitMap1(rs, MinObjAlignment - 1),
 468   _markBitMap2(rs, MinObjAlignment - 1),
 469 
 470   _parallel_marking_threads(0),
 471   _max_parallel_marking_threads(0),
 472   _sleep_factor(0.0),
 473   _marking_task_overhead(1.0),
 474   _cleanup_sleep_factor(0.0),
 475   _cleanup_task_overhead(1.0),
 476   _cleanup_list("Cleanup List"),
 477   _region_bm(max_regions, false /* in_resource_area*/),
 478   _card_bm((rs.size() + CardTableModRefBS::card_size - 1) >>
 479            CardTableModRefBS::card_shift,
 480            false /* in_resource_area*/),
 481   _prevMarkBitMap(&_markBitMap1),
 482   _nextMarkBitMap(&_markBitMap2),
 483   _at_least_one_mark_complete(false),
 484 
 485   _markStack(this),
 486   _regionStack(),
 487   // _finger set in set_non_marking_state
 488 
 489   _max_task_num(MAX2(ParallelGCThreads, (size_t)1)),
 490   // _active_tasks set in set_non_marking_state
 491   // _tasks set inside the constructor
 492   _task_queues(new CMTaskQueueSet((int) _max_task_num)),
 493   _terminator(ParallelTaskTerminator((int) _max_task_num, _task_queues)),
 494 
 495   _has_overflown(false),
 496   _concurrent(false),
 497   _has_aborted(false),
 498   _restart_for_overflow(false),
 499   _concurrent_marking_in_progress(false),
 500   _should_gray_objects(false),
 501 
 502   // _verbose_level set below
 503 
 504   _init_times(),
 505   _remark_times(), _remark_mark_times(), _remark_weak_ref_times(),
 506   _cleanup_times(),
 507   _total_counting_time(0.0),
 508   _total_rs_scrub_time(0.0),
 509 
 510   _parallel_workers(NULL) {
 511   CMVerboseLevel verbose_level = (CMVerboseLevel) G1MarkingVerboseLevel;
 512   if (verbose_level < no_verbose) {
 513     verbose_level = no_verbose;
 514   }
 515   if (verbose_level > high_verbose) {
 516     verbose_level = high_verbose;
 517   }
 518   _verbose_level = verbose_level;
 519 
 520   if (verbose_low()) {
 521     gclog_or_tty->print_cr("[global] init, heap start = "PTR_FORMAT", "
 522                            "heap end = "PTR_FORMAT, _heap_start, _heap_end);
 523   }
 524 
 525   _markStack.allocate(MarkStackSize);
 526   _regionStack.allocate(G1MarkRegionStackSize);
 527 
 528   // Create & start a ConcurrentMark thread.
 529   _cmThread = new ConcurrentMarkThread(this);
 530   assert(cmThread() != NULL, "CM Thread should have been created");
 531   assert(cmThread()->cm() != NULL, "CM Thread should refer to this cm");
 532 
 533   _g1h = G1CollectedHeap::heap();
 534   assert(CGC_lock != NULL, "Where's the CGC_lock?");
 535   assert(_markBitMap1.covers(rs), "_markBitMap1 inconsistency");
 536   assert(_markBitMap2.covers(rs), "_markBitMap2 inconsistency");
 537 
 538   SATBMarkQueueSet& satb_qs = JavaThread::satb_mark_queue_set();
 539   satb_qs.set_buffer_size(G1SATBBufferSize);
 540 
 541   _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num);
 542   _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num);
 543 
 544   // so that the assertion in MarkingTaskQueue::task_queue doesn't fail
 545   _active_tasks = _max_task_num;
 546   for (int i = 0; i < (int) _max_task_num; ++i) {
 547     CMTaskQueue* task_queue = new CMTaskQueue();
 548     task_queue->initialize();
 549     _task_queues->register_queue(i, task_queue);
 550 
 551     _tasks[i] = new CMTask(i, this, task_queue, _task_queues);
 552     _accum_task_vtime[i] = 0.0;
 553   }
 554 
 555   if (ConcGCThreads > ParallelGCThreads) {
 556     vm_exit_during_initialization("Can't have more ConcGCThreads "
 557                                   "than ParallelGCThreads.");
 558   }
 559   if (ParallelGCThreads == 0) {
 560     // if we are not running with any parallel GC threads we will not
 561     // spawn any marking threads either
 562     _parallel_marking_threads =       0;
 563     _max_parallel_marking_threads =   0;
 564     _sleep_factor             =     0.0;
 565     _marking_task_overhead    =     1.0;
 566   } else {
 567     if (ConcGCThreads > 0) {
 568       // notice that ConcGCThreads overwrites G1MarkingOverheadPercent
 569       // if both are set
 570 
 571       _parallel_marking_threads = ConcGCThreads;
 572       _max_parallel_marking_threads = _parallel_marking_threads;
 573       _sleep_factor             = 0.0;
 574       _marking_task_overhead    = 1.0;
 575     } else if (G1MarkingOverheadPercent > 0) {
 576       // we will calculate the number of parallel marking threads
 577       // based on a target overhead with respect to the soft real-time
 578       // goal
 579 
 580       double marking_overhead = (double) G1MarkingOverheadPercent / 100.0;
 581       double overall_cm_overhead =
 582         (double) MaxGCPauseMillis * marking_overhead /
 583         (double) GCPauseIntervalMillis;
 584       double cpu_ratio = 1.0 / (double) os::processor_count();
 585       double marking_thread_num = ceil(overall_cm_overhead / cpu_ratio);
 586       double marking_task_overhead =
 587         overall_cm_overhead / marking_thread_num *
 588                                                 (double) os::processor_count();
 589       double sleep_factor =
 590                          (1.0 - marking_task_overhead) / marking_task_overhead;
 591 
 592       _parallel_marking_threads = (size_t) marking_thread_num;
 593       _max_parallel_marking_threads = _parallel_marking_threads;
 594       _sleep_factor             = sleep_factor;
 595       _marking_task_overhead    = marking_task_overhead;
 596     } else {
 597       _parallel_marking_threads = scale_parallel_threads(ParallelGCThreads);
 598       _max_parallel_marking_threads = _parallel_marking_threads;
 599       _sleep_factor             = 0.0;
 600       _marking_task_overhead    = 1.0;
 601     }
 602 
 603     if (parallel_marking_threads() > 1) {
 604       _cleanup_task_overhead = 1.0;
 605     } else {
 606       _cleanup_task_overhead = marking_task_overhead();
 607     }
 608     _cleanup_sleep_factor =
 609                      (1.0 - cleanup_task_overhead()) / cleanup_task_overhead();
 610 
 611 #if 0
 612     gclog_or_tty->print_cr("Marking Threads          %d", parallel_marking_threads());
 613     gclog_or_tty->print_cr("CM Marking Task Overhead %1.4lf", marking_task_overhead());
 614     gclog_or_tty->print_cr("CM Sleep Factor          %1.4lf", sleep_factor());
 615     gclog_or_tty->print_cr("CL Marking Task Overhead %1.4lf", cleanup_task_overhead());
 616     gclog_or_tty->print_cr("CL Sleep Factor          %1.4lf", cleanup_sleep_factor());
 617 #endif
 618 
 619     guarantee(parallel_marking_threads() > 0, "peace of mind");
 620     _parallel_workers = new FlexibleWorkGang("G1 Parallel Marking Threads",
 621          (int) _max_parallel_marking_threads, false, true);
 622     if (_parallel_workers == NULL) {
 623       vm_exit_during_initialization("Failed necessary allocation.");
 624     } else {
 625       _parallel_workers->initialize_workers();
 626     }
 627   }
 628 
 629   // so that the call below can read a sensible value
 630   _heap_start = (HeapWord*) rs.base();
 631   set_non_marking_state();
 632 }
 633 
 634 void ConcurrentMark::update_g1_committed(bool force) {
 635   // If concurrent marking is not in progress, then we do not need to
 636   // update _heap_end. This has a subtle and important
 637   // side-effect. Imagine that two evacuation pauses happen between
 638   // marking completion and remark. The first one can grow the
 639   // heap (hence now the finger is below the heap end). Then, the
 640   // second one could unnecessarily push regions on the region
 641   // stack. This causes the invariant that the region stack is empty
 642   // at the beginning of remark to be false. By ensuring that we do
 643   // not observe heap expansions after marking is complete, then we do
 644   // not have this problem.
 645   if (!concurrent_marking_in_progress() && !force) return;
 646 
 647   MemRegion committed = _g1h->g1_committed();
 648   assert(committed.start() == _heap_start, "start shouldn't change");
 649   HeapWord* new_end = committed.end();
 650   if (new_end > _heap_end) {
 651     // The heap has been expanded.
 652 
 653     _heap_end = new_end;
 654   }
 655   // Notice that the heap can also shrink. However, this only happens
 656   // during a Full GC (at least currently) and the entire marking
 657   // phase will bail out and the task will not be restarted. So, let's
 658   // do nothing.
 659 }
 660 
 661 void ConcurrentMark::reset() {
 662   // Starting values for these two. This should be called in a STW
 663   // phase. CM will be notified of any future g1_committed expansions
 664   // will be at the end of evacuation pauses, when tasks are
 665   // inactive.
 666   MemRegion committed = _g1h->g1_committed();
 667   _heap_start = committed.start();
 668   _heap_end   = committed.end();
 669 
 670   // Separated the asserts so that we know which one fires.
 671   assert(_heap_start != NULL, "heap bounds should look ok");
 672   assert(_heap_end != NULL, "heap bounds should look ok");
 673   assert(_heap_start < _heap_end, "heap bounds should look ok");
 674 
 675   // reset all the marking data structures and any necessary flags
 676   clear_marking_state();
 677 
 678   if (verbose_low()) {
 679     gclog_or_tty->print_cr("[global] resetting");
 680   }
 681 
 682   // We do reset all of them, since different phases will use
 683   // different number of active threads. So, it's easiest to have all
 684   // of them ready.
 685   for (int i = 0; i < (int) _max_task_num; ++i) {
 686     _tasks[i]->reset(_nextMarkBitMap);
 687   }
 688 
 689   // we need this to make sure that the flag is on during the evac
 690   // pause with initial mark piggy-backed
 691   set_concurrent_marking_in_progress();
 692 }
 693 
 694 void ConcurrentMark::set_phase(size_t active_tasks, bool concurrent) {
 695   assert(active_tasks <= _max_task_num, "we should not have more");
 696 
 697   _active_tasks = active_tasks;
 698   // Need to update the three data structures below according to the
 699   // number of active threads for this phase.
 700   _terminator   = ParallelTaskTerminator((int) active_tasks, _task_queues);
 701   _first_overflow_barrier_sync.set_n_workers((int) active_tasks);
 702   _second_overflow_barrier_sync.set_n_workers((int) active_tasks);
 703 
 704   _concurrent = concurrent;
 705   // We propagate this to all tasks, not just the active ones.
 706   for (int i = 0; i < (int) _max_task_num; ++i)
 707     _tasks[i]->set_concurrent(concurrent);
 708 
 709   if (concurrent) {
 710     set_concurrent_marking_in_progress();
 711   } else {
 712     // We currently assume that the concurrent flag has been set to
 713     // false before we start remark. At this point we should also be
 714     // in a STW phase.
 715     assert(!concurrent_marking_in_progress(), "invariant");
 716     assert(_finger == _heap_end, "only way to get here");
 717     update_g1_committed(true);
 718   }
 719 }
 720 
 721 void ConcurrentMark::set_non_marking_state() {
 722   // We set the global marking state to some default values when we're
 723   // not doing marking.
 724   clear_marking_state();
 725   _active_tasks = 0;
 726   clear_concurrent_marking_in_progress();
 727 }
 728 
 729 ConcurrentMark::~ConcurrentMark() {
 730   for (int i = 0; i < (int) _max_task_num; ++i) {
 731     delete _task_queues->queue(i);
 732     delete _tasks[i];
 733   }
 734   delete _task_queues;
 735   FREE_C_HEAP_ARRAY(CMTask*, _max_task_num);
 736 }
 737 
 738 // This closure is used to mark refs into the g1 generation
 739 // from external roots in the CMS bit map.
 740 // Called at the first checkpoint.
 741 //
 742 
 743 void ConcurrentMark::clearNextBitmap() {
 744   G1CollectedHeap* g1h = G1CollectedHeap::heap();
 745   G1CollectorPolicy* g1p = g1h->g1_policy();
 746 
 747   // Make sure that the concurrent mark thread looks to still be in
 748   // the current cycle.
 749   guarantee(cmThread()->during_cycle(), "invariant");
 750 
 751   // We are finishing up the current cycle by clearing the next
 752   // marking bitmap and getting it ready for the next cycle. During
 753   // this time no other cycle can start. So, let's make sure that this
 754   // is the case.
 755   guarantee(!g1h->mark_in_progress(), "invariant");
 756 
 757   // clear the mark bitmap (no grey objects to start with).
 758   // We need to do this in chunks and offer to yield in between
 759   // each chunk.
 760   HeapWord* start  = _nextMarkBitMap->startWord();
 761   HeapWord* end    = _nextMarkBitMap->endWord();
 762   HeapWord* cur    = start;
 763   size_t chunkSize = M;
 764   while (cur < end) {
 765     HeapWord* next = cur + chunkSize;
 766     if (next > end) {
 767       next = end;
 768     }
 769     MemRegion mr(cur,next);
 770     _nextMarkBitMap->clearRange(mr);
 771     cur = next;
 772     do_yield_check();
 773 
 774     // Repeat the asserts from above. We'll do them as asserts here to
 775     // minimize their overhead on the product. However, we'll have
 776     // them as guarantees at the beginning / end of the bitmap
 777     // clearing to get some checking in the product.
 778     assert(cmThread()->during_cycle(), "invariant");
 779     assert(!g1h->mark_in_progress(), "invariant");
 780   }
 781 
 782   // Repeat the asserts from above.
 783   guarantee(cmThread()->during_cycle(), "invariant");
 784   guarantee(!g1h->mark_in_progress(), "invariant");
 785 }
 786 
 787 class NoteStartOfMarkHRClosure: public HeapRegionClosure {
 788 public:
 789   bool doHeapRegion(HeapRegion* r) {
 790     if (!r->continuesHumongous()) {
 791       r->note_start_of_marking(true);
 792     }
 793     return false;
 794   }
 795 };
 796 
 797 void ConcurrentMark::checkpointRootsInitialPre() {
 798   G1CollectedHeap*   g1h = G1CollectedHeap::heap();
 799   G1CollectorPolicy* g1p = g1h->g1_policy();
 800 
 801   _has_aborted = false;
 802 
 803 #ifndef PRODUCT
 804   if (G1PrintReachableAtInitialMark) {
 805     print_reachable("at-cycle-start",
 806                     VerifyOption_G1UsePrevMarking, true /* all */);
 807   }
 808 #endif
 809 
 810   // Initialise marking structures. This has to be done in a STW phase.
 811   reset();
 812 }
 813 
 814 
 815 void ConcurrentMark::checkpointRootsInitialPost() {
 816   G1CollectedHeap*   g1h = G1CollectedHeap::heap();
 817 
 818   // If we force an overflow during remark, the remark operation will
 819   // actually abort and we'll restart concurrent marking. If we always
 820   // force an oveflow during remark we'll never actually complete the
 821   // marking phase. So, we initilize this here, at the start of the
 822   // cycle, so that at the remaining overflow number will decrease at
 823   // every remark and we'll eventually not need to cause one.
 824   force_overflow_stw()->init();
 825 
 826   // For each region note start of marking.
 827   NoteStartOfMarkHRClosure startcl;
 828   g1h->heap_region_iterate(&startcl);
 829 
 830   // Start Concurrent Marking weak-reference discovery.
 831   ReferenceProcessor* rp = g1h->ref_processor_cm();
 832   // enable ("weak") refs discovery
 833   rp->enable_discovery(true /*verify_disabled*/, true /*verify_no_refs*/);
 834   rp->setup_policy(false); // snapshot the soft ref policy to be used in this cycle
 835 
 836   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
 837   // This is the start of  the marking cycle, we're expected all
 838   // threads to have SATB queues with active set to false.
 839   satb_mq_set.set_active_all_threads(true, /* new active value */
 840                                      false /* expected_active */);
 841 
 842   // update_g1_committed() will be called at the end of an evac pause
 843   // when marking is on. So, it's also called at the end of the
 844   // initial-mark pause to update the heap end, if the heap expands
 845   // during it. No need to call it here.
 846 }
 847 
 848 /*
 849  * Notice that in the next two methods, we actually leave the STS
 850  * during the barrier sync and join it immediately afterwards. If we
 851  * do not do this, the following deadlock can occur: one thread could
 852  * be in the barrier sync code, waiting for the other thread to also
 853  * sync up, whereas another one could be trying to yield, while also
 854  * waiting for the other threads to sync up too.
 855  *
 856  * Note, however, that this code is also used during remark and in
 857  * this case we should not attempt to leave / enter the STS, otherwise
 858  * we'll either hit an asseert (debug / fastdebug) or deadlock
 859  * (product). So we should only leave / enter the STS if we are
 860  * operating concurrently.
 861  *
 862  * Because the thread that does the sync barrier has left the STS, it
 863  * is possible to be suspended for a Full GC or an evacuation pause
 864  * could occur. This is actually safe, since the entering the sync
 865  * barrier is one of the last things do_marking_step() does, and it
 866  * doesn't manipulate any data structures afterwards.
 867  */
 868 
 869 void ConcurrentMark::enter_first_sync_barrier(int task_num) {
 870   if (verbose_low()) {
 871     gclog_or_tty->print_cr("[%d] entering first barrier", task_num);
 872   }
 873 
 874   if (concurrent()) {
 875     ConcurrentGCThread::stsLeave();
 876   }
 877   _first_overflow_barrier_sync.enter();
 878   if (concurrent()) {
 879     ConcurrentGCThread::stsJoin();
 880   }
 881   // at this point everyone should have synced up and not be doing any
 882   // more work
 883 
 884   if (verbose_low()) {
 885     gclog_or_tty->print_cr("[%d] leaving first barrier", task_num);
 886   }
 887 
 888   // let task 0 do this
 889   if (task_num == 0) {
 890     // task 0 is responsible for clearing the global data structures
 891     // We should be here because of an overflow. During STW we should
 892     // not clear the overflow flag since we rely on it being true when
 893     // we exit this method to abort the pause and restart concurent
 894     // marking.
 895     clear_marking_state(concurrent() /* clear_overflow */);
 896     force_overflow()->update();
 897 
 898     if (PrintGC) {
 899       gclog_or_tty->date_stamp(PrintGCDateStamps);
 900       gclog_or_tty->stamp(PrintGCTimeStamps);
 901       gclog_or_tty->print_cr("[GC concurrent-mark-reset-for-overflow]");
 902     }
 903   }
 904 
 905   // after this, each task should reset its own data structures then
 906   // then go into the second barrier
 907 }
 908 
 909 void ConcurrentMark::enter_second_sync_barrier(int task_num) {
 910   if (verbose_low()) {
 911     gclog_or_tty->print_cr("[%d] entering second barrier", task_num);
 912   }
 913 
 914   if (concurrent()) {
 915     ConcurrentGCThread::stsLeave();
 916   }
 917   _second_overflow_barrier_sync.enter();
 918   if (concurrent()) {
 919     ConcurrentGCThread::stsJoin();
 920   }
 921   // at this point everything should be re-initialised and ready to go
 922 
 923   if (verbose_low()) {
 924     gclog_or_tty->print_cr("[%d] leaving second barrier", task_num);
 925   }
 926 }
 927 
 928 #ifndef PRODUCT
 929 void ForceOverflowSettings::init() {
 930   _num_remaining = G1ConcMarkForceOverflow;
 931   _force = false;
 932   update();
 933 }
 934 
 935 void ForceOverflowSettings::update() {
 936   if (_num_remaining > 0) {
 937     _num_remaining -= 1;
 938     _force = true;
 939   } else {
 940     _force = false;
 941   }
 942 }
 943 
 944 bool ForceOverflowSettings::should_force() {
 945   if (_force) {
 946     _force = false;
 947     return true;
 948   } else {
 949     return false;
 950   }
 951 }
 952 #endif // !PRODUCT
 953 
 954 void ConcurrentMark::grayRoot(oop p) {
 955   HeapWord* addr = (HeapWord*) p;
 956   // We can't really check against _heap_start and _heap_end, since it
 957   // is possible during an evacuation pause with piggy-backed
 958   // initial-mark that the committed space is expanded during the
 959   // pause without CM observing this change. So the assertions below
 960   // is a bit conservative; but better than nothing.
 961   assert(_g1h->g1_committed().contains(addr),
 962          "address should be within the heap bounds");
 963 
 964   if (!_nextMarkBitMap->isMarked(addr)) {
 965     _nextMarkBitMap->parMark(addr);
 966   }
 967 }
 968 
 969 void ConcurrentMark::grayRegionIfNecessary(MemRegion mr) {
 970   // The objects on the region have already been marked "in bulk" by
 971   // the caller. We only need to decide whether to push the region on
 972   // the region stack or not.
 973 
 974   if (!concurrent_marking_in_progress() || !_should_gray_objects) {
 975     // We're done with marking and waiting for remark. We do not need to
 976     // push anything else on the region stack.
 977     return;
 978   }
 979 
 980   HeapWord* finger = _finger;
 981 
 982   if (verbose_low()) {
 983     gclog_or_tty->print_cr("[global] attempting to push "
 984                            "region ["PTR_FORMAT", "PTR_FORMAT"), finger is at "
 985                            PTR_FORMAT, mr.start(), mr.end(), finger);
 986   }
 987 
 988   if (mr.start() < finger) {
 989     // The finger is always heap region aligned and it is not possible
 990     // for mr to span heap regions.
 991     assert(mr.end() <= finger, "invariant");
 992 
 993     // Separated the asserts so that we know which one fires.
 994     assert(mr.start() <= mr.end(),
 995            "region boundaries should fall within the committed space");
 996     assert(_heap_start <= mr.start(),
 997            "region boundaries should fall within the committed space");
 998     assert(mr.end() <= _heap_end,
 999            "region boundaries should fall within the committed space");
1000     if (verbose_low()) {
1001       gclog_or_tty->print_cr("[global] region ["PTR_FORMAT", "PTR_FORMAT") "
1002                              "below the finger, pushing it",
1003                              mr.start(), mr.end());
1004     }
1005 
1006     if (!region_stack_push_lock_free(mr)) {
1007       if (verbose_low()) {
1008         gclog_or_tty->print_cr("[global] region stack has overflown.");
1009       }
1010     }
1011   }
1012 }
1013 
1014 void ConcurrentMark::markAndGrayObjectIfNecessary(oop p) {
1015   // The object is not marked by the caller. We need to at least mark
1016   // it and maybe push in on the stack.
1017 
1018   HeapWord* addr = (HeapWord*)p;
1019   if (!_nextMarkBitMap->isMarked(addr)) {
1020     // We definitely need to mark it, irrespective whether we bail out
1021     // because we're done with marking.
1022     if (_nextMarkBitMap->parMark(addr)) {
1023       if (!concurrent_marking_in_progress() || !_should_gray_objects) {
1024         // If we're done with concurrent marking and we're waiting for
1025         // remark, then we're not pushing anything on the stack.
1026         return;
1027       }
1028 
1029       // No OrderAccess:store_load() is needed. It is implicit in the
1030       // CAS done in parMark(addr) above
1031       HeapWord* finger = _finger;
1032 
1033       if (addr < finger) {
1034         if (!mark_stack_push(oop(addr))) {
1035           if (verbose_low()) {
1036             gclog_or_tty->print_cr("[global] global stack overflow "
1037                                    "during parMark");
1038           }
1039         }
1040       }
1041     }
1042   }
1043 }
1044 
1045 class CMConcurrentMarkingTask: public AbstractGangTask {
1046 private:
1047   ConcurrentMark*       _cm;
1048   ConcurrentMarkThread* _cmt;
1049 
1050 public:
1051   void work(int worker_i) {
1052     assert(Thread::current()->is_ConcurrentGC_thread(),
1053            "this should only be done by a conc GC thread");
1054     ResourceMark rm;
1055 
1056     double start_vtime = os::elapsedVTime();
1057 
1058     ConcurrentGCThread::stsJoin();
1059 
1060     assert((size_t) worker_i < _cm->active_tasks(), "invariant");
1061     CMTask* the_task = _cm->task(worker_i);
1062     the_task->record_start_time();
1063     if (!_cm->has_aborted()) {
1064       do {
1065         double start_vtime_sec = os::elapsedVTime();
1066         double start_time_sec = os::elapsedTime();
1067         double mark_step_duration_ms = G1ConcMarkStepDurationMillis;
1068 
1069         the_task->do_marking_step(mark_step_duration_ms,
1070                                   true /* do_stealing    */,
1071                                   true /* do_termination */);
1072 
1073         double end_time_sec = os::elapsedTime();
1074         double end_vtime_sec = os::elapsedVTime();
1075         double elapsed_vtime_sec = end_vtime_sec - start_vtime_sec;
1076         double elapsed_time_sec = end_time_sec - start_time_sec;
1077         _cm->clear_has_overflown();
1078 
1079         bool ret = _cm->do_yield_check(worker_i);
1080 
1081         jlong sleep_time_ms;
1082         if (!_cm->has_aborted() && the_task->has_aborted()) {
1083           sleep_time_ms =
1084             (jlong) (elapsed_vtime_sec * _cm->sleep_factor() * 1000.0);
1085           ConcurrentGCThread::stsLeave();
1086           os::sleep(Thread::current(), sleep_time_ms, false);
1087           ConcurrentGCThread::stsJoin();
1088         }
1089         double end_time2_sec = os::elapsedTime();
1090         double elapsed_time2_sec = end_time2_sec - start_time_sec;
1091 
1092 #if 0
1093           gclog_or_tty->print_cr("CM: elapsed %1.4lf ms, sleep %1.4lf ms, "
1094                                  "overhead %1.4lf",
1095                                  elapsed_vtime_sec * 1000.0, (double) sleep_time_ms,
1096                                  the_task->conc_overhead(os::elapsedTime()) * 8.0);
1097           gclog_or_tty->print_cr("elapsed time %1.4lf ms, time 2: %1.4lf ms",
1098                                  elapsed_time_sec * 1000.0, elapsed_time2_sec * 1000.0);
1099 #endif
1100       } while (!_cm->has_aborted() && the_task->has_aborted());
1101     }
1102     the_task->record_end_time();
1103     guarantee(!the_task->has_aborted() || _cm->has_aborted(), "invariant");
1104 
1105     ConcurrentGCThread::stsLeave();
1106 
1107     double end_vtime = os::elapsedVTime();
1108     _cm->update_accum_task_vtime(worker_i, end_vtime - start_vtime);
1109   }
1110 
1111   CMConcurrentMarkingTask(ConcurrentMark* cm,
1112                           ConcurrentMarkThread* cmt) :
1113       AbstractGangTask("Concurrent Mark"), _cm(cm), _cmt(cmt) { }
1114 
1115   ~CMConcurrentMarkingTask() { }
1116 };
1117 
1118 // Calculates the number of active workers for a concurrent
1119 // phase.
1120 int ConcurrentMark::calc_parallel_marking_threads() {
1121 
1122   size_t n_conc_workers = 0;
1123   if (G1CollectedHeap::use_parallel_gc_threads()) {


1124     if (!UseDynamicNumberOfGCThreads ||
1125         (!FLAG_IS_DEFAULT(ConcGCThreads) &&
1126          !ForceDynamicNumberOfGCThreads)) {
1127       n_conc_workers = max_parallel_marking_threads();
1128     } else {
1129       n_conc_workers =
1130         AdaptiveSizePolicy::calc_default_active_workers(
1131                                      max_parallel_marking_threads(),
1132                                      1, /* Minimum workers */
1133                                      parallel_marking_threads(),
1134                                      Threads::number_of_non_daemon_threads());
1135       // Don't scale down "n_conc_workers" by scale_parallel_threads() because
1136       // that scaling has already gone into "_max_parallel_marking_threads".
1137     }

1138     assert(n_conc_workers > 0, "Always need at least 1");
1139   }
1140   return (int) MAX2(n_conc_workers, max_parallel_marking_threads());
1141 }
1142 
1143 void ConcurrentMark::markFromRoots() {
1144   // we might be tempted to assert that:
1145   // assert(asynch == !SafepointSynchronize::is_at_safepoint(),
1146   //        "inconsistent argument?");
1147   // However that wouldn't be right, because it's possible that
1148   // a safepoint is indeed in progress as a younger generation
1149   // stop-the-world GC happens even as we mark in this generation.
1150 
1151   _restart_for_overflow = false;


1152   force_overflow_conc()->init();
1153 
1154   // _g1h has _n_par_threads

1155   _parallel_marking_threads = calc_parallel_marking_threads();
1156   assert(parallel_marking_threads() <= max_parallel_marking_threads(),
1157     "Maximum number of marking threads exceeded");



1158 
1159   size_t active_workers = MAX2((size_t) 1, parallel_marking_threads());
1160 
1161   // Parallel task terminator is set in "set_phase()"
1162   set_phase(active_workers, true /* concurrent */);
1163 
1164   CMConcurrentMarkingTask markingTask(this, cmThread());
1165   if (parallel_marking_threads() > 0) {
1166     _parallel_workers->set_active_workers((int)active_workers);
1167     // Don't set _n_par_threads because it affects MT in proceess_strong_roots()
1168     // and the decisions on that MT processing is made elsewhere.
1169     assert(_parallel_workers->active_workers() > 0, "Should have been set");
1170     _parallel_workers->run_task(&markingTask);
1171   } else {
1172     markingTask.work(0);
1173   }
1174   print_stats();
1175 }
1176 
1177 void ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) {
1178   // world is stopped at this checkpoint
1179   assert(SafepointSynchronize::is_at_safepoint(),
1180          "world should be stopped");
1181 
1182   G1CollectedHeap* g1h = G1CollectedHeap::heap();
1183 
1184   // If a full collection has happened, we shouldn't do this.
1185   if (has_aborted()) {
1186     g1h->set_marking_complete(); // So bitmap clearing isn't confused
1187     return;
1188   }
1189 
1190   SvcGCMarker sgcm(SvcGCMarker::OTHER);
1191 
1192   if (VerifyDuringGC) {
1193     HandleMark hm;  // handle scope
1194     gclog_or_tty->print(" VerifyDuringGC:(before)");
1195     Universe::heap()->prepare_for_verify();
1196     Universe::verify(/* allow dirty */ true,
1197                      /* silent      */ false,
1198                      /* option      */ VerifyOption_G1UsePrevMarking);
1199   }
1200 
1201   G1CollectorPolicy* g1p = g1h->g1_policy();
1202   g1p->record_concurrent_mark_remark_start();
1203 
1204   double start = os::elapsedTime();
1205 
1206   checkpointRootsFinalWork();
1207 
1208   double mark_work_end = os::elapsedTime();
1209 
1210   weakRefsWork(clear_all_soft_refs);
1211 
1212   if (has_overflown()) {
1213     // Oops.  We overflowed.  Restart concurrent marking.
1214     _restart_for_overflow = true;
1215     // Clear the flag. We do not need it any more.
1216     clear_has_overflown();
1217     if (G1TraceMarkStackOverflow) {
1218       gclog_or_tty->print_cr("\nRemark led to restart for overflow.");
1219     }
1220   } else {
1221     SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
1222     // We're done with marking.
1223     // This is the end of  the marking cycle, we're expected all
1224     // threads to have SATB queues with active set to true.
1225     satb_mq_set.set_active_all_threads(false, /* new active value */
1226                                        true /* expected_active */);
1227 
1228     if (VerifyDuringGC) {
1229 
1230       HandleMark hm;  // handle scope
1231       gclog_or_tty->print(" VerifyDuringGC:(after)");
1232       Universe::heap()->prepare_for_verify();
1233       Universe::verify(/* allow dirty */ true,
1234                        /* silent      */ false,
1235                        /* option      */ VerifyOption_G1UseNextMarking);
1236     }
1237     assert(!restart_for_overflow(), "sanity");
1238   }
1239 
1240   // Reset the marking state if marking completed
1241   if (!restart_for_overflow()) {
1242     set_non_marking_state();
1243   }
1244 
1245 #if VERIFY_OBJS_PROCESSED
1246   _scan_obj_cl.objs_processed = 0;
1247   ThreadLocalObjQueue::objs_enqueued = 0;
1248 #endif
1249 
1250   // Statistics
1251   double now = os::elapsedTime();
1252   _remark_mark_times.add((mark_work_end - start) * 1000.0);
1253   _remark_weak_ref_times.add((now - mark_work_end) * 1000.0);
1254   _remark_times.add((now - start) * 1000.0);
1255 
1256   g1p->record_concurrent_mark_remark_end();
1257 }
1258 
1259 #define CARD_BM_TEST_MODE 0
1260 
1261 class CalcLiveObjectsClosure: public HeapRegionClosure {
1262 
1263   CMBitMapRO* _bm;
1264   ConcurrentMark* _cm;
1265   bool _changed;
1266   bool _yield;
1267   size_t _words_done;
1268   size_t _tot_live;
1269   size_t _tot_used;
1270   size_t _regions_done;
1271   double _start_vtime_sec;
1272 
1273   BitMap* _region_bm;
1274   BitMap* _card_bm;
1275   intptr_t _bottom_card_num;
1276   bool _final;
1277 
1278   void mark_card_num_range(intptr_t start_card_num, intptr_t last_card_num) {
1279     for (intptr_t i = start_card_num; i <= last_card_num; i++) {
1280 #if CARD_BM_TEST_MODE
1281       guarantee(_card_bm->at(i - _bottom_card_num), "Should already be set.");
1282 #else
1283       _card_bm->par_at_put(i - _bottom_card_num, 1);
1284 #endif
1285     }
1286   }
1287 
1288 public:
1289   CalcLiveObjectsClosure(bool final,
1290                          CMBitMapRO *bm, ConcurrentMark *cm,
1291                          BitMap* region_bm, BitMap* card_bm) :
1292     _bm(bm), _cm(cm), _changed(false), _yield(true),
1293     _words_done(0), _tot_live(0), _tot_used(0),
1294     _region_bm(region_bm), _card_bm(card_bm),_final(final),
1295     _regions_done(0), _start_vtime_sec(0.0)
1296   {
1297     _bottom_card_num =
1298       intptr_t(uintptr_t(G1CollectedHeap::heap()->reserved_region().start()) >>
1299                CardTableModRefBS::card_shift);
1300   }
1301 
1302   // It takes a region that's not empty (i.e., it has at least one
1303   // live object in it and sets its corresponding bit on the region
1304   // bitmap to 1. If the region is "starts humongous" it will also set
1305   // to 1 the bits on the region bitmap that correspond to its
1306   // associated "continues humongous" regions.
1307   void set_bit_for_region(HeapRegion* hr) {
1308     assert(!hr->continuesHumongous(), "should have filtered those out");
1309 
1310     size_t index = hr->hrs_index();
1311     if (!hr->startsHumongous()) {
1312       // Normal (non-humongous) case: just set the bit.
1313       _region_bm->par_at_put((BitMap::idx_t) index, true);
1314     } else {
1315       // Starts humongous case: calculate how many regions are part of
1316       // this humongous region and then set the bit range. It might
1317       // have been a bit more efficient to look at the object that
1318       // spans these humongous regions to calculate their number from
1319       // the object's size. However, it's a good idea to calculate
1320       // this based on the metadata itself, and not the region
1321       // contents, so that this code is not aware of what goes into
1322       // the humongous regions (in case this changes in the future).
1323       G1CollectedHeap* g1h = G1CollectedHeap::heap();
1324       size_t end_index = index + 1;
1325       while (end_index < g1h->n_regions()) {
1326         HeapRegion* chr = g1h->region_at(end_index);
1327         if (!chr->continuesHumongous()) break;
1328         end_index += 1;
1329       }
1330       _region_bm->par_at_put_range((BitMap::idx_t) index,
1331                                    (BitMap::idx_t) end_index, true);
1332     }
1333   }
1334 
1335   bool doHeapRegion(HeapRegion* hr) {
1336     if (!_final && _regions_done == 0) {
1337       _start_vtime_sec = os::elapsedVTime();
1338     }
1339 
1340     if (hr->continuesHumongous()) {
1341       // We will ignore these here and process them when their
1342       // associated "starts humongous" region is processed (see
1343       // set_bit_for_heap_region()). Note that we cannot rely on their
1344       // associated "starts humongous" region to have their bit set to
1345       // 1 since, due to the region chunking in the parallel region
1346       // iteration, a "continues humongous" region might be visited
1347       // before its associated "starts humongous".
1348       return false;
1349     }
1350 
1351     HeapWord* nextTop = hr->next_top_at_mark_start();
1352     HeapWord* start   = hr->top_at_conc_mark_count();
1353     assert(hr->bottom() <= start && start <= hr->end() &&
1354            hr->bottom() <= nextTop && nextTop <= hr->end() &&
1355            start <= nextTop,
1356            "Preconditions.");
1357     // Otherwise, record the number of word's we'll examine.
1358     size_t words_done = (nextTop - start);
1359     // Find the first marked object at or after "start".
1360     start = _bm->getNextMarkedWordAddress(start, nextTop);
1361     size_t marked_bytes = 0;
1362 
1363     // Below, the term "card num" means the result of shifting an address
1364     // by the card shift -- address 0 corresponds to card number 0.  One
1365     // must subtract the card num of the bottom of the heap to obtain a
1366     // card table index.
1367     // The first card num of the sequence of live cards currently being
1368     // constructed.  -1 ==> no sequence.
1369     intptr_t start_card_num = -1;
1370     // The last card num of the sequence of live cards currently being
1371     // constructed.  -1 ==> no sequence.
1372     intptr_t last_card_num = -1;
1373 
1374     while (start < nextTop) {
1375       if (_yield && _cm->do_yield_check()) {
1376         // We yielded.  It might be for a full collection, in which case
1377         // all bets are off; terminate the traversal.
1378         if (_cm->has_aborted()) {
1379           _changed = false;
1380           return true;
1381         } else {
1382           // Otherwise, it might be a collection pause, and the region
1383           // we're looking at might be in the collection set.  We'll
1384           // abandon this region.
1385           return false;
1386         }
1387       }
1388       oop obj = oop(start);
1389       int obj_sz = obj->size();
1390       // The card num of the start of the current object.
1391       intptr_t obj_card_num =
1392         intptr_t(uintptr_t(start) >> CardTableModRefBS::card_shift);
1393 
1394       HeapWord* obj_last = start + obj_sz - 1;
1395       intptr_t obj_last_card_num =
1396         intptr_t(uintptr_t(obj_last) >> CardTableModRefBS::card_shift);
1397 
1398       if (obj_card_num != last_card_num) {
1399         if (start_card_num == -1) {
1400           assert(last_card_num == -1, "Both or neither.");
1401           start_card_num = obj_card_num;
1402         } else {
1403           assert(last_card_num != -1, "Both or neither.");
1404           assert(obj_card_num >= last_card_num, "Inv");
1405           if ((obj_card_num - last_card_num) > 1) {
1406             // Mark the last run, and start a new one.
1407             mark_card_num_range(start_card_num, last_card_num);
1408             start_card_num = obj_card_num;
1409           }
1410         }
1411 #if CARD_BM_TEST_MODE
1412         /*
1413         gclog_or_tty->print_cr("Setting bits from %d/%d.",
1414                                obj_card_num - _bottom_card_num,
1415                                obj_last_card_num - _bottom_card_num);
1416         */
1417         for (intptr_t j = obj_card_num; j <= obj_last_card_num; j++) {
1418           _card_bm->par_at_put(j - _bottom_card_num, 1);
1419         }
1420 #endif
1421       }
1422       // In any case, we set the last card num.
1423       last_card_num = obj_last_card_num;
1424 
1425       marked_bytes += (size_t)obj_sz * HeapWordSize;
1426       // Find the next marked object after this one.
1427       start = _bm->getNextMarkedWordAddress(start + 1, nextTop);
1428       _changed = true;
1429     }
1430     // Handle the last range, if any.
1431     if (start_card_num != -1) {
1432       mark_card_num_range(start_card_num, last_card_num);
1433     }
1434     if (_final) {
1435       // Mark the allocated-since-marking portion...
1436       HeapWord* tp = hr->top();
1437       if (nextTop < tp) {
1438         start_card_num =
1439           intptr_t(uintptr_t(nextTop) >> CardTableModRefBS::card_shift);
1440         last_card_num =
1441           intptr_t(uintptr_t(tp) >> CardTableModRefBS::card_shift);
1442         mark_card_num_range(start_card_num, last_card_num);
1443         // This definitely means the region has live objects.
1444         set_bit_for_region(hr);
1445       }
1446     }
1447 
1448     hr->add_to_marked_bytes(marked_bytes);
1449     // Update the live region bitmap.
1450     if (marked_bytes > 0) {
1451       set_bit_for_region(hr);
1452     }
1453     hr->set_top_at_conc_mark_count(nextTop);
1454     _tot_live += hr->next_live_bytes();
1455     _tot_used += hr->used();
1456     _words_done = words_done;
1457 
1458     if (!_final) {
1459       ++_regions_done;
1460       if (_regions_done % 10 == 0) {
1461         double end_vtime_sec = os::elapsedVTime();
1462         double elapsed_vtime_sec = end_vtime_sec - _start_vtime_sec;
1463         if (elapsed_vtime_sec > (10.0 / 1000.0)) {
1464           jlong sleep_time_ms =
1465             (jlong) (elapsed_vtime_sec * _cm->cleanup_sleep_factor() * 1000.0);
1466           os::sleep(Thread::current(), sleep_time_ms, false);
1467           _start_vtime_sec = end_vtime_sec;
1468         }
1469       }
1470     }
1471 
1472     return false;
1473   }
1474 
1475   bool changed() { return _changed;  }
1476   void reset()   { _changed = false; _words_done = 0; }
1477   void no_yield() { _yield = false; }
1478   size_t words_done() { return _words_done; }
1479   size_t tot_live() { return _tot_live; }
1480   size_t tot_used() { return _tot_used; }
1481 };
1482 
1483 
1484 void ConcurrentMark::calcDesiredRegions() {
1485   _region_bm.clear();
1486   _card_bm.clear();
1487   CalcLiveObjectsClosure calccl(false /*final*/,
1488                                 nextMarkBitMap(), this,
1489                                 &_region_bm, &_card_bm);
1490   G1CollectedHeap *g1h = G1CollectedHeap::heap();
1491   g1h->heap_region_iterate(&calccl);
1492 
1493   do {
1494     calccl.reset();
1495     g1h->heap_region_iterate(&calccl);
1496   } while (calccl.changed());
1497 }
1498 
1499 class G1ParFinalCountTask: public AbstractGangTask {
1500 protected:
1501   G1CollectedHeap* _g1h;
1502   CMBitMap* _bm;
1503   size_t _n_workers;
1504   size_t *_live_bytes;
1505   size_t *_used_bytes;
1506   BitMap* _region_bm;
1507   BitMap* _card_bm;
1508 public:
1509   G1ParFinalCountTask(G1CollectedHeap* g1h, CMBitMap* bm,
1510                       BitMap* region_bm, BitMap* card_bm)
1511     : AbstractGangTask("G1 final counting"), _g1h(g1h),
1512     _bm(bm), _region_bm(region_bm), _card_bm(card_bm),
1513     _n_workers(0)
1514   {
1515     // Use the value already set as the number of active threads
1516     // in the call to run_task().  Needed for the allocation of
1517     // _live_bytes and _used_bytes.
1518     if (G1CollectedHeap::use_parallel_gc_threads()) {
1519       assert( _g1h->workers()->active_workers() > 0,
1520         "Should have been previously set");
1521       _n_workers = _g1h->workers()->active_workers();
1522     } else {
1523       _n_workers = 1;
1524     }
1525 
1526     _live_bytes = NEW_C_HEAP_ARRAY(size_t, _n_workers);
1527     _used_bytes = NEW_C_HEAP_ARRAY(size_t, _n_workers);
1528   }
1529 
1530   ~G1ParFinalCountTask() {
1531     FREE_C_HEAP_ARRAY(size_t, _live_bytes);
1532     FREE_C_HEAP_ARRAY(size_t, _used_bytes);
1533   }
1534 
1535   void work(int i) {
1536     CalcLiveObjectsClosure calccl(true /*final*/,
1537                                   _bm, _g1h->concurrent_mark(),
1538                                   _region_bm, _card_bm);
1539     calccl.no_yield();
1540     if (G1CollectedHeap::use_parallel_gc_threads()) {
1541       _g1h->heap_region_par_iterate_chunked(&calccl, i,
1542                                             (int) _n_workers,
1543                                             HeapRegion::FinalCountClaimValue);
1544     } else {
1545       _g1h->heap_region_iterate(&calccl);
1546     }
1547     assert(calccl.complete(), "Shouldn't have yielded!");
1548 
1549     assert((size_t) i < _n_workers, "invariant");
1550     _live_bytes[i] = calccl.tot_live();
1551     _used_bytes[i] = calccl.tot_used();
1552   }
1553   size_t live_bytes()  {
1554     size_t live_bytes = 0;
1555     for (size_t i = 0; i < _n_workers; ++i)
1556       live_bytes += _live_bytes[i];
1557     return live_bytes;
1558   }
1559   size_t used_bytes()  {
1560     size_t used_bytes = 0;
1561     for (size_t i = 0; i < _n_workers; ++i)
1562       used_bytes += _used_bytes[i];
1563     return used_bytes;
1564   }
1565 };
1566 
1567 class G1ParNoteEndTask;
1568 
1569 class G1NoteEndOfConcMarkClosure : public HeapRegionClosure {
1570   G1CollectedHeap* _g1;
1571   int _worker_num;
1572   size_t _max_live_bytes;
1573   size_t _regions_claimed;
1574   size_t _freed_bytes;
1575   FreeRegionList* _local_cleanup_list;
1576   OldRegionSet* _old_proxy_set;
1577   HumongousRegionSet* _humongous_proxy_set;
1578   HRRSCleanupTask* _hrrs_cleanup_task;
1579   double _claimed_region_time;
1580   double _max_region_time;
1581 
1582 public:
1583   G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1,
1584                              int worker_num,
1585                              FreeRegionList* local_cleanup_list,
1586                              OldRegionSet* old_proxy_set,
1587                              HumongousRegionSet* humongous_proxy_set,
1588                              HRRSCleanupTask* hrrs_cleanup_task) :
1589     _g1(g1), _worker_num(worker_num),
1590     _max_live_bytes(0), _regions_claimed(0),
1591     _freed_bytes(0),
1592     _claimed_region_time(0.0), _max_region_time(0.0),
1593     _local_cleanup_list(local_cleanup_list),
1594     _old_proxy_set(old_proxy_set),
1595     _humongous_proxy_set(humongous_proxy_set),
1596     _hrrs_cleanup_task(hrrs_cleanup_task) { }
1597 
1598   size_t freed_bytes() { return _freed_bytes; }
1599 
1600   bool doHeapRegion(HeapRegion *hr) {
1601     // We use a claim value of zero here because all regions
1602     // were claimed with value 1 in the FinalCount task.
1603     hr->reset_gc_time_stamp();
1604     if (!hr->continuesHumongous()) {
1605       double start = os::elapsedTime();
1606       _regions_claimed++;
1607       hr->note_end_of_marking();
1608       _max_live_bytes += hr->max_live_bytes();
1609       _g1->free_region_if_empty(hr,
1610                                 &_freed_bytes,
1611                                 _local_cleanup_list,
1612                                 _old_proxy_set,
1613                                 _humongous_proxy_set,
1614                                 _hrrs_cleanup_task,
1615                                 true /* par */);
1616       double region_time = (os::elapsedTime() - start);
1617       _claimed_region_time += region_time;
1618       if (region_time > _max_region_time) {
1619         _max_region_time = region_time;
1620       }
1621     }
1622     return false;
1623   }
1624 
1625   size_t max_live_bytes() { return _max_live_bytes; }
1626   size_t regions_claimed() { return _regions_claimed; }
1627   double claimed_region_time_sec() { return _claimed_region_time; }
1628   double max_region_time_sec() { return _max_region_time; }
1629 };
1630 
1631 class G1ParNoteEndTask: public AbstractGangTask {
1632   friend class G1NoteEndOfConcMarkClosure;
1633 
1634 protected:
1635   G1CollectedHeap* _g1h;
1636   size_t _max_live_bytes;
1637   size_t _freed_bytes;
1638   FreeRegionList* _cleanup_list;
1639 
1640 public:
1641   G1ParNoteEndTask(G1CollectedHeap* g1h,
1642                    FreeRegionList* cleanup_list) :
1643     AbstractGangTask("G1 note end"), _g1h(g1h),
1644     _max_live_bytes(0), _freed_bytes(0), _cleanup_list(cleanup_list) { }
1645 
1646   void work(int i) {
1647     double start = os::elapsedTime();
1648     FreeRegionList local_cleanup_list("Local Cleanup List");
1649     OldRegionSet old_proxy_set("Local Cleanup Old Proxy Set");
1650     HumongousRegionSet humongous_proxy_set("Local Cleanup Humongous Proxy Set");
1651     HRRSCleanupTask hrrs_cleanup_task;
1652     G1NoteEndOfConcMarkClosure g1_note_end(_g1h, i, &local_cleanup_list,
1653                                            &old_proxy_set,
1654                                            &humongous_proxy_set,
1655                                            &hrrs_cleanup_task);
1656     if (G1CollectedHeap::use_parallel_gc_threads()) {
1657       _g1h->heap_region_par_iterate_chunked(&g1_note_end, i,
1658                                             _g1h->workers()->active_workers(),
1659                                             HeapRegion::NoteEndClaimValue);
1660     } else {
1661       _g1h->heap_region_iterate(&g1_note_end);
1662     }
1663     assert(g1_note_end.complete(), "Shouldn't have yielded!");
1664 
1665     // Now update the lists
1666     _g1h->update_sets_after_freeing_regions(g1_note_end.freed_bytes(),
1667                                             NULL /* free_list */,
1668                                             &old_proxy_set,
1669                                             &humongous_proxy_set,
1670                                             true /* par */);
1671     {
1672       MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
1673       _max_live_bytes += g1_note_end.max_live_bytes();
1674       _freed_bytes += g1_note_end.freed_bytes();
1675 
1676       // If we iterate over the global cleanup list at the end of
1677       // cleanup to do this printing we will not guarantee to only
1678       // generate output for the newly-reclaimed regions (the list
1679       // might not be empty at the beginning of cleanup; we might
1680       // still be working on its previous contents). So we do the
1681       // printing here, before we append the new regions to the global
1682       // cleanup list.
1683 
1684       G1HRPrinter* hr_printer = _g1h->hr_printer();
1685       if (hr_printer->is_active()) {
1686         HeapRegionLinkedListIterator iter(&local_cleanup_list);
1687         while (iter.more_available()) {
1688           HeapRegion* hr = iter.get_next();
1689           hr_printer->cleanup(hr);
1690         }
1691       }
1692 
1693       _cleanup_list->add_as_tail(&local_cleanup_list);
1694       assert(local_cleanup_list.is_empty(), "post-condition");
1695 
1696       HeapRegionRemSet::finish_cleanup_task(&hrrs_cleanup_task);
1697     }
1698     double end = os::elapsedTime();
1699     if (G1PrintParCleanupStats) {
1700       gclog_or_tty->print("     Worker thread %d [%8.3f..%8.3f = %8.3f ms] "
1701                           "claimed %d regions (tot = %8.3f ms, max = %8.3f ms).\n",
1702                           i, start, end, (end-start)*1000.0,
1703                           g1_note_end.regions_claimed(),
1704                           g1_note_end.claimed_region_time_sec()*1000.0,
1705                           g1_note_end.max_region_time_sec()*1000.0);
1706     }
1707   }
1708   size_t max_live_bytes() { return _max_live_bytes; }
1709   size_t freed_bytes() { return _freed_bytes; }
1710 };
1711 
1712 class G1ParScrubRemSetTask: public AbstractGangTask {
1713 protected:
1714   G1RemSet* _g1rs;
1715   BitMap* _region_bm;
1716   BitMap* _card_bm;
1717 public:
1718   G1ParScrubRemSetTask(G1CollectedHeap* g1h,
1719                        BitMap* region_bm, BitMap* card_bm) :
1720     AbstractGangTask("G1 ScrubRS"), _g1rs(g1h->g1_rem_set()),
1721     _region_bm(region_bm), _card_bm(card_bm)
1722   {}
1723 
1724   void work(int i) {
1725     if (G1CollectedHeap::use_parallel_gc_threads()) {
1726       _g1rs->scrub_par(_region_bm, _card_bm, i,
1727                        HeapRegion::ScrubRemSetClaimValue);
1728     } else {
1729       _g1rs->scrub(_region_bm, _card_bm);
1730     }
1731   }
1732 
1733 };
1734 
1735 void ConcurrentMark::cleanup() {
1736   // world is stopped at this checkpoint
1737   assert(SafepointSynchronize::is_at_safepoint(),
1738          "world should be stopped");
1739   G1CollectedHeap* g1h = G1CollectedHeap::heap();
1740 
1741   // If a full collection has happened, we shouldn't do this.
1742   if (has_aborted()) {
1743     g1h->set_marking_complete(); // So bitmap clearing isn't confused
1744     return;
1745   }
1746 
1747   HRSPhaseSetter x(HRSPhaseCleanup);
1748   g1h->verify_region_sets_optional();
1749 
1750   if (VerifyDuringGC) {
1751     HandleMark hm;  // handle scope
1752     gclog_or_tty->print(" VerifyDuringGC:(before)");
1753     Universe::heap()->prepare_for_verify();
1754     Universe::verify(/* allow dirty */ true,
1755                      /* silent      */ false,
1756                      /* option      */ VerifyOption_G1UsePrevMarking);
1757   }
1758 
1759   G1CollectorPolicy* g1p = G1CollectedHeap::heap()->g1_policy();
1760   g1p->record_concurrent_mark_cleanup_start();
1761 
1762   double start = os::elapsedTime();
1763 
1764   HeapRegionRemSet::reset_for_cleanup_tasks();
1765 
1766   size_t n_workers;
1767 
1768 
1769   // Do counting once more with the world stopped for good measure.
1770   G1ParFinalCountTask g1_par_count_task(g1h, nextMarkBitMap(),
1771                                         &_region_bm, &_card_bm);
1772   if (G1CollectedHeap::use_parallel_gc_threads()) {
1773     assert(g1h->check_heap_region_claim_values(
1774                                                HeapRegion::InitialClaimValue),
1775            "sanity check");
1776     
1777     g1h->set_par_threads();
1778     n_workers = g1h->n_par_threads();
1779     assert(g1h->n_par_threads() == (int) n_workers,
1780            "Should not have been reset");
1781     g1h->workers()->run_task(&g1_par_count_task);
1782     // Done with the parallel phase so reset to 0.
1783     g1h->set_par_threads(0);
1784 
1785     assert(g1h->check_heap_region_claim_values(
1786                                              HeapRegion::FinalCountClaimValue),
1787            "sanity check");
1788   } else {
1789     n_workers = 1;
1790     g1_par_count_task.work(0);
1791   }
1792 
1793   size_t known_garbage_bytes =
1794     g1_par_count_task.used_bytes() - g1_par_count_task.live_bytes();
1795   g1p->set_known_garbage_bytes(known_garbage_bytes);
1796 
1797   size_t start_used_bytes = g1h->used();
1798   _at_least_one_mark_complete = true;
1799   g1h->set_marking_complete();
1800 
1801   ergo_verbose4(ErgoConcCycles,
1802            "finish cleanup",
1803            ergo_format_byte("occupancy")
1804            ergo_format_byte("capacity")
1805            ergo_format_byte_perc("known garbage"),
1806            start_used_bytes, g1h->capacity(),
1807            known_garbage_bytes,
1808            ((double) known_garbage_bytes / (double) g1h->capacity()) * 100.0);
1809 
1810   double count_end = os::elapsedTime();
1811   double this_final_counting_time = (count_end - start);
1812   if (G1PrintParCleanupStats) {
1813     gclog_or_tty->print_cr("Cleanup:");
1814     gclog_or_tty->print_cr("  Finalize counting: %8.3f ms",
1815                            this_final_counting_time*1000.0);
1816   }
1817   _total_counting_time += this_final_counting_time;
1818 
1819   if (G1PrintRegionLivenessInfo) {
1820     G1PrintRegionLivenessInfoClosure cl(gclog_or_tty, "Post-Marking");
1821     _g1h->heap_region_iterate(&cl);
1822   }
1823 
1824   // Install newly created mark bitMap as "prev".
1825   swapMarkBitMaps();
1826 
1827   g1h->reset_gc_time_stamp();
1828 
1829   // Note end of marking in all heap regions.
1830   double note_end_start = os::elapsedTime();
1831   G1ParNoteEndTask g1_par_note_end_task(g1h, &_cleanup_list);
1832   if (G1CollectedHeap::use_parallel_gc_threads()) {
1833     g1h->set_par_threads((int)n_workers);
1834     g1h->workers()->run_task(&g1_par_note_end_task);
1835     g1h->set_par_threads(0);
1836 
1837     assert(g1h->check_heap_region_claim_values(HeapRegion::NoteEndClaimValue),
1838            "sanity check");
1839   } else {
1840     g1_par_note_end_task.work(0);
1841   }
1842 
1843   if (!cleanup_list_is_empty()) {
1844     // The cleanup list is not empty, so we'll have to process it
1845     // concurrently. Notify anyone else that might be wanting free
1846     // regions that there will be more free regions coming soon.
1847     g1h->set_free_regions_coming();
1848   }
1849   double note_end_end = os::elapsedTime();
1850   if (G1PrintParCleanupStats) {
1851     gclog_or_tty->print_cr("  note end of marking: %8.3f ms.",
1852                            (note_end_end - note_end_start)*1000.0);
1853   }
1854 

1855   // call below, since it affects the metric by which we sort the heap
1856   // regions.
1857   if (G1ScrubRemSets) {
1858     double rs_scrub_start = os::elapsedTime();
1859     G1ParScrubRemSetTask g1_par_scrub_rs_task(g1h, &_region_bm, &_card_bm);
1860     if (G1CollectedHeap::use_parallel_gc_threads()) {
1861       g1h->set_par_threads((int)n_workers);
1862       g1h->workers()->run_task(&g1_par_scrub_rs_task);
1863       g1h->set_par_threads(0);
1864 
1865       assert(g1h->check_heap_region_claim_values(
1866                                             HeapRegion::ScrubRemSetClaimValue),
1867              "sanity check");
1868     } else {
1869       g1_par_scrub_rs_task.work(0);
1870     }
1871 
1872     double rs_scrub_end = os::elapsedTime();
1873     double this_rs_scrub_time = (rs_scrub_end - rs_scrub_start);
1874     _total_rs_scrub_time += this_rs_scrub_time;
1875   }
1876 
1877   // this will also free any regions totally full of garbage objects,
1878   // and sort the regions.
1879   g1h->g1_policy()->record_concurrent_mark_cleanup_end((int)n_workers);
1880 
1881   // Statistics.
1882   double end = os::elapsedTime();
1883   _cleanup_times.add((end - start) * 1000.0);
1884 
1885   // G1CollectedHeap::heap()->print();
1886   // gclog_or_tty->print_cr("HEAP GC TIME STAMP : %d",
1887   // G1CollectedHeap::heap()->get_gc_time_stamp());
1888 
1889   if (PrintGC || PrintGCDetails) {
1890     g1h->print_size_transition(gclog_or_tty,
1891                                start_used_bytes,
1892                                g1h->used(),
1893                                g1h->capacity());
1894   }
1895 
1896   size_t cleaned_up_bytes = start_used_bytes - g1h->used();
1897   g1p->decrease_known_garbage_bytes(cleaned_up_bytes);
1898 
1899   // Clean up will have freed any regions completely full of garbage.
1900   // Update the soft reference policy with the new heap occupancy.
1901   Universe::update_heap_info_at_gc();
1902 
1903   // We need to make this be a "collection" so any collection pause that
1904   // races with it goes around and waits for completeCleanup to finish.
1905   g1h->increment_total_collections();
1906 
1907   if (VerifyDuringGC) {
1908     HandleMark hm;  // handle scope
1909     gclog_or_tty->print(" VerifyDuringGC:(after)");
1910     Universe::heap()->prepare_for_verify();
1911     Universe::verify(/* allow dirty */ true,
1912                      /* silent      */ false,
1913                      /* option      */ VerifyOption_G1UsePrevMarking);
1914   }
1915 
1916   g1h->verify_region_sets_optional();
1917 }
1918 
1919 void ConcurrentMark::completeCleanup() {
1920   if (has_aborted()) return;
1921 
1922   G1CollectedHeap* g1h = G1CollectedHeap::heap();
1923 
1924   _cleanup_list.verify_optional();
1925   FreeRegionList tmp_free_list("Tmp Free List");
1926 
1927   if (G1ConcRegionFreeingVerbose) {
1928     gclog_or_tty->print_cr("G1ConcRegionFreeing [complete cleanup] : "
1929                            "cleanup list has "SIZE_FORMAT" entries",
1930                            _cleanup_list.length());
1931   }
1932 
1933   // Noone else should be accessing the _cleanup_list at this point,
1934   // so it's not necessary to take any locks
1935   while (!_cleanup_list.is_empty()) {
1936     HeapRegion* hr = _cleanup_list.remove_head();
1937     assert(hr != NULL, "the list was not empty");
1938     hr->par_clear();
1939     tmp_free_list.add_as_tail(hr);
1940 
1941     // Instead of adding one region at a time to the secondary_free_list,
1942     // we accumulate them in the local list and move them a few at a
1943     // time. This also cuts down on the number of notify_all() calls
1944     // we do during this process. We'll also append the local list when
1945     // _cleanup_list is empty (which means we just removed the last
1946     // region from the _cleanup_list).
1947     if ((tmp_free_list.length() % G1SecondaryFreeListAppendLength == 0) ||
1948         _cleanup_list.is_empty()) {
1949       if (G1ConcRegionFreeingVerbose) {
1950         gclog_or_tty->print_cr("G1ConcRegionFreeing [complete cleanup] : "
1951                                "appending "SIZE_FORMAT" entries to the "
1952                                "secondary_free_list, clean list still has "
1953                                SIZE_FORMAT" entries",
1954                                tmp_free_list.length(),
1955                                _cleanup_list.length());
1956       }
1957 
1958       {
1959         MutexLockerEx x(SecondaryFreeList_lock, Mutex::_no_safepoint_check_flag);
1960         g1h->secondary_free_list_add_as_tail(&tmp_free_list);
1961         SecondaryFreeList_lock->notify_all();
1962       }
1963 
1964       if (G1StressConcRegionFreeing) {
1965         for (uintx i = 0; i < G1StressConcRegionFreeingDelayMillis; ++i) {
1966           os::sleep(Thread::current(), (jlong) 1, false);
1967         }
1968       }
1969     }
1970   }
1971   assert(tmp_free_list.is_empty(), "post-condition");
1972 }
1973 
1974 // Support closures for reference procssing in G1
1975 
1976 bool G1CMIsAliveClosure::do_object_b(oop obj) {
1977   HeapWord* addr = (HeapWord*)obj;
1978   return addr != NULL &&
1979          (!_g1->is_in_g1_reserved(addr) || !_g1->is_obj_ill(obj));
1980 }
1981 
1982 class G1CMKeepAliveClosure: public OopClosure {
1983   G1CollectedHeap* _g1;
1984   ConcurrentMark*  _cm;
1985   CMBitMap*        _bitMap;
1986  public:
1987   G1CMKeepAliveClosure(G1CollectedHeap* g1, ConcurrentMark* cm,
1988                        CMBitMap* bitMap) :
1989     _g1(g1), _cm(cm),
1990     _bitMap(bitMap) {}
1991 
1992   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
1993   virtual void do_oop(      oop* p) { do_oop_work(p); }
1994 
1995   template <class T> void do_oop_work(T* p) {
1996     oop obj = oopDesc::load_decode_heap_oop(p);
1997     HeapWord* addr = (HeapWord*)obj;
1998 
1999     if (_cm->verbose_high()) {
2000       gclog_or_tty->print_cr("\t[0] we're looking at location "
2001                              "*"PTR_FORMAT" = "PTR_FORMAT,
2002                              p, (void*) obj);
2003     }
2004 
2005     if (_g1->is_in_g1_reserved(addr) && _g1->is_obj_ill(obj)) {
2006       _bitMap->mark(addr);
2007       _cm->mark_stack_push(obj);
2008     }
2009   }
2010 };
2011 
2012 class G1CMDrainMarkingStackClosure: public VoidClosure {
2013   CMMarkStack*                  _markStack;
2014   CMBitMap*                     _bitMap;
2015   G1CMKeepAliveClosure*         _oopClosure;
2016  public:
2017   G1CMDrainMarkingStackClosure(CMBitMap* bitMap, CMMarkStack* markStack,
2018                                G1CMKeepAliveClosure* oopClosure) :
2019     _bitMap(bitMap),
2020     _markStack(markStack),
2021     _oopClosure(oopClosure)
2022   {}
2023 
2024   void do_void() {
2025     _markStack->drain((OopClosure*)_oopClosure, _bitMap, false);
2026   }
2027 };
2028 
2029 // 'Keep Alive' closure used by parallel reference processing.
2030 // An instance of this closure is used in the parallel reference processing
2031 // code rather than an instance of G1CMKeepAliveClosure. We could have used
2032 // the G1CMKeepAliveClosure as it is MT-safe. Also reference objects are
2033 // placed on to discovered ref lists once so we can mark and push with no
2034 // need to check whether the object has already been marked. Using the
2035 // G1CMKeepAliveClosure would mean, however, having all the worker threads
2036 // operating on the global mark stack. This means that an individual
2037 // worker would be doing lock-free pushes while it processes its own
2038 // discovered ref list followed by drain call. If the discovered ref lists
2039 // are unbalanced then this could cause interference with the other
2040 // workers. Using a CMTask (and its embedded local data structures)
2041 // avoids that potential interference.
2042 class G1CMParKeepAliveAndDrainClosure: public OopClosure {
2043   ConcurrentMark*  _cm;
2044   CMTask*          _task;
2045   int              _ref_counter_limit;
2046   int              _ref_counter;
2047  public:
2048   G1CMParKeepAliveAndDrainClosure(ConcurrentMark* cm, CMTask* task) :
2049     _cm(cm), _task(task),
2050     _ref_counter_limit(G1RefProcDrainInterval) {
2051     assert(_ref_counter_limit > 0, "sanity");
2052     _ref_counter = _ref_counter_limit;
2053   }
2054 
2055   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
2056   virtual void do_oop(      oop* p) { do_oop_work(p); }
2057 
2058   template <class T> void do_oop_work(T* p) {
2059     if (!_cm->has_overflown()) {
2060       oop obj = oopDesc::load_decode_heap_oop(p);
2061       if (_cm->verbose_high()) {
2062         gclog_or_tty->print_cr("\t[%d] we're looking at location "
2063                                "*"PTR_FORMAT" = "PTR_FORMAT,
2064                                _task->task_id(), p, (void*) obj);
2065       }
2066 
2067       _task->deal_with_reference(obj);
2068       _ref_counter--;
2069 
2070       if (_ref_counter == 0) {
2071         // We have dealt with _ref_counter_limit references, pushing them and objects
2072         // reachable from them on to the local stack (and possibly the global stack).
2073         // Call do_marking_step() to process these entries. We call the routine in a
2074         // loop, which we'll exit if there's nothing more to do (i.e. we're done
2075         // with the entries that we've pushed as a result of the deal_with_reference
2076         // calls above) or we overflow.
2077         // Note: CMTask::do_marking_step() can set the CMTask::has_aborted() flag
2078         // while there may still be some work to do. (See the comment at the
2079         // beginning of CMTask::do_marking_step() for those conditions - one of which
2080         // is reaching the specified time target.) It is only when
2081         // CMTask::do_marking_step() returns without setting the has_aborted() flag
2082         // that the marking has completed.
2083         do {
2084           double mark_step_duration_ms = G1ConcMarkStepDurationMillis;
2085           _task->do_marking_step(mark_step_duration_ms,
2086                                  false /* do_stealing    */,
2087                                  false /* do_termination */);
2088         } while (_task->has_aborted() && !_cm->has_overflown());
2089         _ref_counter = _ref_counter_limit;
2090       }
2091     } else {
2092       if (_cm->verbose_high()) {
2093          gclog_or_tty->print_cr("\t[%d] CM Overflow", _task->task_id());
2094       }
2095     }
2096   }
2097 };
2098 
2099 class G1CMParDrainMarkingStackClosure: public VoidClosure {
2100   ConcurrentMark* _cm;
2101   CMTask* _task;
2102  public:
2103   G1CMParDrainMarkingStackClosure(ConcurrentMark* cm, CMTask* task) :
2104     _cm(cm), _task(task)
2105   {}
2106 
2107   void do_void() {
2108     do {
2109       if (_cm->verbose_high()) {
2110         gclog_or_tty->print_cr("\t[%d] Drain: Calling do marking_step",
2111                                _task->task_id());
2112       }
2113 
2114       // We call CMTask::do_marking_step() to completely drain the local and
2115       // global marking stacks. The routine is called in a loop, which we'll
2116       // exit if there's nothing more to do (i.e. we'completely drained the
2117       // entries that were pushed as a result of applying the
2118       // G1CMParKeepAliveAndDrainClosure to the entries on the discovered ref
2119       // lists above) or we overflow the global marking stack.
2120       // Note: CMTask::do_marking_step() can set the CMTask::has_aborted() flag
2121       // while there may still be some work to do. (See the comment at the
2122       // beginning of CMTask::do_marking_step() for those conditions - one of which
2123       // is reaching the specified time target.) It is only when
2124       // CMTask::do_marking_step() returns without setting the has_aborted() flag
2125       // that the marking has completed.
2126 
2127       _task->do_marking_step(1000000000.0 /* something very large */,
2128                              true /* do_stealing    */,
2129                              true /* do_termination */);
2130     } while (_task->has_aborted() && !_cm->has_overflown());
2131   }
2132 };
2133 
2134 // Implementation of AbstractRefProcTaskExecutor for parallel
2135 // reference processing at the end of G1 concurrent marking
2136 
2137 class G1CMRefProcTaskExecutor: public AbstractRefProcTaskExecutor {
2138 private:
2139   G1CollectedHeap* _g1h;
2140   ConcurrentMark*  _cm;
2141   WorkGang*        _workers;
2142   int              _active_workers;
2143 
2144 public:
2145   G1CMRefProcTaskExecutor(G1CollectedHeap* g1h,
2146                         ConcurrentMark* cm,
2147                         WorkGang* workers,
2148                         int n_workers) :
2149     _g1h(g1h), _cm(cm),
2150     _workers(workers), _active_workers(n_workers) { }
2151 
2152   // Executes the given task using concurrent marking worker threads.
2153   virtual void execute(ProcessTask& task);
2154   virtual void execute(EnqueueTask& task);
2155 };
2156 
2157 class G1CMRefProcTaskProxy: public AbstractGangTask {
2158   typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask;
2159   ProcessTask&     _proc_task;
2160   G1CollectedHeap* _g1h;
2161   ConcurrentMark*  _cm;
2162 
2163 public:
2164   G1CMRefProcTaskProxy(ProcessTask& proc_task,
2165                      G1CollectedHeap* g1h,
2166                      ConcurrentMark* cm) :
2167     AbstractGangTask("Process reference objects in parallel"),
2168     _proc_task(proc_task), _g1h(g1h), _cm(cm) { }
2169 
2170   virtual void work(int i) {
2171     CMTask* marking_task = _cm->task(i);
2172     G1CMIsAliveClosure g1_is_alive(_g1h);
2173     G1CMParKeepAliveAndDrainClosure g1_par_keep_alive(_cm, marking_task);
2174     G1CMParDrainMarkingStackClosure g1_par_drain(_cm, marking_task);
2175 
2176     _proc_task.work(i, g1_is_alive, g1_par_keep_alive, g1_par_drain);
2177   }
2178 };
2179 
2180 void G1CMRefProcTaskExecutor::execute(ProcessTask& proc_task) {
2181   assert(_workers != NULL, "Need parallel worker threads.");
2182 
2183   G1CMRefProcTaskProxy proc_task_proxy(proc_task, _g1h, _cm);
2184 
2185   // We need to reset the phase for each task execution so that
2186   // the termination protocol of CMTask::do_marking_step works.
2187   _cm->set_phase(_active_workers, false /* concurrent */);
2188   _g1h->set_par_threads(_active_workers);
2189   _workers->run_task(&proc_task_proxy);
2190   _g1h->set_par_threads(0);
2191 }
2192 
2193 class G1CMRefEnqueueTaskProxy: public AbstractGangTask {
2194   typedef AbstractRefProcTaskExecutor::EnqueueTask EnqueueTask;
2195   EnqueueTask& _enq_task;
2196 
2197 public:
2198   G1CMRefEnqueueTaskProxy(EnqueueTask& enq_task) :
2199     AbstractGangTask("Enqueue reference objects in parallel"),
2200     _enq_task(enq_task) { }
2201 
2202   virtual void work(int i) {
2203     _enq_task.work(i);
2204   }
2205 };
2206 
2207 void G1CMRefProcTaskExecutor::execute(EnqueueTask& enq_task) {
2208   assert(_workers != NULL, "Need parallel worker threads.");
2209 
2210   G1CMRefEnqueueTaskProxy enq_task_proxy(enq_task);
2211 
2212   _g1h->set_par_threads(_active_workers);
2213   _workers->run_task(&enq_task_proxy);
2214   _g1h->set_par_threads(0);
2215 }
2216 
2217 void ConcurrentMark::weakRefsWork(bool clear_all_soft_refs) {
2218   ResourceMark rm;
2219   HandleMark   hm;
2220 
2221   G1CollectedHeap* g1h = G1CollectedHeap::heap();
2222 
2223   // Is alive closure.
2224   G1CMIsAliveClosure g1_is_alive(g1h);
2225 
2226   // Inner scope to exclude the cleaning of the string and symbol
2227   // tables from the displayed time.
2228   {
2229     bool verbose = PrintGC && PrintGCDetails;
2230     if (verbose) {
2231       gclog_or_tty->put(' ');
2232     }
2233     TraceTime t("GC ref-proc", verbose, false, gclog_or_tty);
2234 
2235     ReferenceProcessor* rp = g1h->ref_processor_cm();
2236 
2237     // See the comment in G1CollectedHeap::ref_processing_init()
2238     // about how reference processing currently works in G1.
2239 
2240     // Process weak references.
2241     rp->setup_policy(clear_all_soft_refs);
2242     assert(_markStack.isEmpty(), "mark stack should be empty");
2243 
2244     G1CMKeepAliveClosure g1_keep_alive(g1h, this, nextMarkBitMap());
2245     G1CMDrainMarkingStackClosure
2246       g1_drain_mark_stack(nextMarkBitMap(), &_markStack, &g1_keep_alive);
2247 
2248     // We use the work gang from the G1CollectedHeap and we utilize all
2249     // the worker threads.
2250     int active_workers = g1h->workers() ? g1h->workers()->active_workers() : 1;
2251     active_workers = MAX2(MIN2(active_workers, (int)_max_task_num), 1);
2252 
2253     G1CMRefProcTaskExecutor par_task_executor(g1h, this,
2254                                               g1h->workers(), active_workers);
2255 
2256     if (rp->processing_is_mt()) {
2257       // Set the degree of MT here.  If the discovery is done MT, there
2258       // may have been a different number of threads doing the discovery
2259       // and a different number of discovered lists may have Ref objects.
2260       // That is OK as long as the Reference lists are balanced (see
2261       // balance_all_queues() and balance_queues()).
2262       rp->set_active_mt_degree(active_workers);
2263 
2264       rp->process_discovered_references(&g1_is_alive,
2265                                       &g1_keep_alive,
2266                                       &g1_drain_mark_stack,
2267                                       &par_task_executor);
2268 
2269       // The work routines of the parallel keep_alive and drain_marking_stack
2270       // will set the has_overflown flag if we overflow the global marking
2271       // stack.
2272     } else {
2273       rp->process_discovered_references(&g1_is_alive,
2274                                         &g1_keep_alive,
2275                                         &g1_drain_mark_stack,
2276                                         NULL);
2277     }
2278 
2279     assert(_markStack.overflow() || _markStack.isEmpty(),
2280             "mark stack should be empty (unless it overflowed)");
2281     if (_markStack.overflow()) {
2282       // Should have been done already when we tried to push an
2283       // entry on to the global mark stack. But let's do it again.
2284       set_has_overflown();
2285     }
2286 
2287     if (rp->processing_is_mt()) {
2288       assert(rp->num_q() == active_workers, "why not");
2289       rp->enqueue_discovered_references(&par_task_executor);
2290     } else {
2291       rp->enqueue_discovered_references();
2292     }
2293 
2294     rp->verify_no_references_recorded();
2295     assert(!rp->discovery_enabled(), "Post condition");
2296   }
2297 
2298   // Now clean up stale oops in StringTable
2299   StringTable::unlink(&g1_is_alive);
2300   // Clean up unreferenced symbols in symbol table.
2301   SymbolTable::unlink();
2302 }
2303 
2304 void ConcurrentMark::swapMarkBitMaps() {
2305   CMBitMapRO* temp = _prevMarkBitMap;
2306   _prevMarkBitMap  = (CMBitMapRO*)_nextMarkBitMap;
2307   _nextMarkBitMap  = (CMBitMap*)  temp;
2308 }
2309 
2310 class CMRemarkTask: public AbstractGangTask {
2311 private:
2312   ConcurrentMark *_cm;
2313 
2314 public:
2315   void work(int worker_i) {
2316     // Since all available tasks are actually started, we should
2317     // only proceed if we're supposed to be actived.
2318     if ((size_t)worker_i < _cm->active_tasks()) {
2319       CMTask* task = _cm->task(worker_i);
2320       task->record_start_time();
2321       do {
2322         task->do_marking_step(1000000000.0 /* something very large */,
2323                               true /* do_stealing    */,
2324                               true /* do_termination */);
2325       } while (task->has_aborted() && !_cm->has_overflown());
2326       // If we overflow, then we do not want to restart. We instead
2327       // want to abort remark and do concurrent marking again.
2328       task->record_end_time();
2329     }
2330   }
2331 
2332   CMRemarkTask(ConcurrentMark* cm, int active_workers) :
2333     AbstractGangTask("Par Remark"), _cm(cm) {
2334     _cm->terminator()->reset_for_reuse(active_workers);
2335   }
2336 };
2337 
2338 void ConcurrentMark::checkpointRootsFinalWork() {
2339   ResourceMark rm;
2340   HandleMark   hm;
2341   G1CollectedHeap* g1h = G1CollectedHeap::heap();
2342 
2343   g1h->ensure_parsability(false);
2344 
2345   if (G1CollectedHeap::use_parallel_gc_threads()) {
2346     G1CollectedHeap::StrongRootsScope srs(g1h);
2347     // this is remark, so we'll use up all active threads
2348     int active_workers = g1h->workers()->active_workers();
2349     if (active_workers == 0) {
2350       assert(active_workers > 0, "Should have been set earlier");
2351       active_workers = ParallelGCThreads;
2352       g1h->workers()->set_active_workers(active_workers);
2353     }
2354     set_phase(active_workers, false /* concurrent */);
2355     // Leave _parallel_marking_threads at it's
2356     // value originally calculated in the ConcurrentMark
2357     // constructor and pass values of the active workers
2358     // through the gang in the task.
2359 
2360     CMRemarkTask remarkTask(this, active_workers);
2361     g1h->set_par_threads(active_workers);
2362     g1h->workers()->run_task(&remarkTask);
2363     g1h->set_par_threads(0);
2364   } else {
2365     G1CollectedHeap::StrongRootsScope srs(g1h);
2366     // this is remark, so we'll use up all available threads
2367     int active_workers = 1;
2368     set_phase(active_workers, false /* concurrent */);
2369 
2370     CMRemarkTask remarkTask(this, active_workers);
2371     // We will start all available threads, even if we decide that the
2372     // active_workers will be fewer. The extra ones will just bail out
2373     // immediately.
2374     remarkTask.work(0);
2375   }
2376   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
2377   guarantee(satb_mq_set.completed_buffers_num() == 0, "invariant");
2378 
2379   print_stats();
2380 
2381 #if VERIFY_OBJS_PROCESSED
2382   if (_scan_obj_cl.objs_processed != ThreadLocalObjQueue::objs_enqueued) {
2383     gclog_or_tty->print_cr("Processed = %d, enqueued = %d.",
2384                            _scan_obj_cl.objs_processed,
2385                            ThreadLocalObjQueue::objs_enqueued);
2386     guarantee(_scan_obj_cl.objs_processed ==
2387               ThreadLocalObjQueue::objs_enqueued,
2388               "Different number of objs processed and enqueued.");
2389   }
2390 #endif
2391 }
2392 
2393 #ifndef PRODUCT
2394 
2395 class PrintReachableOopClosure: public OopClosure {
2396 private:
2397   G1CollectedHeap* _g1h;
2398   outputStream*    _out;
2399   VerifyOption     _vo;
2400   bool             _all;
2401 
2402 public:
2403   PrintReachableOopClosure(outputStream* out,
2404                            VerifyOption  vo,
2405                            bool          all) :
2406     _g1h(G1CollectedHeap::heap()),
2407     _out(out), _vo(vo), _all(all) { }
2408 
2409   void do_oop(narrowOop* p) { do_oop_work(p); }
2410   void do_oop(      oop* p) { do_oop_work(p); }
2411 
2412   template <class T> void do_oop_work(T* p) {
2413     oop         obj = oopDesc::load_decode_heap_oop(p);
2414     const char* str = NULL;
2415     const char* str2 = "";
2416 
2417     if (obj == NULL) {
2418       str = "";
2419     } else if (!_g1h->is_in_g1_reserved(obj)) {
2420       str = " O";
2421     } else {
2422       HeapRegion* hr  = _g1h->heap_region_containing(obj);
2423       guarantee(hr != NULL, "invariant");
2424       bool over_tams = false;
2425       bool marked = false;
2426 
2427       switch (_vo) {
2428         case VerifyOption_G1UsePrevMarking:
2429           over_tams = hr->obj_allocated_since_prev_marking(obj);
2430           marked = _g1h->isMarkedPrev(obj);
2431           break;
2432         case VerifyOption_G1UseNextMarking:
2433           over_tams = hr->obj_allocated_since_next_marking(obj);
2434           marked = _g1h->isMarkedNext(obj);
2435           break;
2436         case VerifyOption_G1UseMarkWord:
2437           marked = obj->is_gc_marked();
2438           break;
2439         default:
2440           ShouldNotReachHere();
2441       }
2442 
2443       if (over_tams) {
2444         str = " >";
2445         if (marked) {
2446           str2 = " AND MARKED";
2447         }
2448       } else if (marked) {
2449         str = " M";
2450       } else {
2451         str = " NOT";
2452       }
2453     }
2454 
2455     _out->print_cr("  "PTR_FORMAT": "PTR_FORMAT"%s%s",
2456                    p, (void*) obj, str, str2);
2457   }
2458 };
2459 
2460 class PrintReachableObjectClosure : public ObjectClosure {
2461 private:
2462   G1CollectedHeap* _g1h;
2463   outputStream*    _out;
2464   VerifyOption     _vo;
2465   bool             _all;
2466   HeapRegion*      _hr;
2467 
2468 public:
2469   PrintReachableObjectClosure(outputStream* out,
2470                               VerifyOption  vo,
2471                               bool          all,
2472                               HeapRegion*   hr) :
2473     _g1h(G1CollectedHeap::heap()),
2474     _out(out), _vo(vo), _all(all), _hr(hr) { }
2475 
2476   void do_object(oop o) {
2477     bool over_tams = false;
2478     bool marked = false;
2479 
2480     switch (_vo) {
2481       case VerifyOption_G1UsePrevMarking:
2482         over_tams = _hr->obj_allocated_since_prev_marking(o);
2483         marked = _g1h->isMarkedPrev(o);
2484         break;
2485       case VerifyOption_G1UseNextMarking:
2486         over_tams = _hr->obj_allocated_since_next_marking(o);
2487         marked = _g1h->isMarkedNext(o);
2488         break;
2489       case VerifyOption_G1UseMarkWord:
2490         marked = o->is_gc_marked();
2491         break;
2492       default:
2493         ShouldNotReachHere();
2494     }
2495     bool print_it = _all || over_tams || marked;
2496 
2497     if (print_it) {
2498       _out->print_cr(" "PTR_FORMAT"%s",
2499                      o, (over_tams) ? " >" : (marked) ? " M" : "");
2500       PrintReachableOopClosure oopCl(_out, _vo, _all);
2501       o->oop_iterate(&oopCl);
2502     }
2503   }
2504 };
2505 
2506 class PrintReachableRegionClosure : public HeapRegionClosure {
2507 private:
2508   outputStream* _out;
2509   VerifyOption  _vo;
2510   bool          _all;
2511 
2512 public:
2513   bool doHeapRegion(HeapRegion* hr) {
2514     HeapWord* b = hr->bottom();
2515     HeapWord* e = hr->end();
2516     HeapWord* t = hr->top();
2517     HeapWord* p = NULL;
2518 
2519     switch (_vo) {
2520       case VerifyOption_G1UsePrevMarking:
2521         p = hr->prev_top_at_mark_start();
2522         break;
2523       case VerifyOption_G1UseNextMarking:
2524         p = hr->next_top_at_mark_start();
2525         break;
2526       case VerifyOption_G1UseMarkWord:
2527         // When we are verifying marking using the mark word
2528         // TAMS has no relevance.
2529         assert(p == NULL, "post-condition");
2530         break;
2531       default:
2532         ShouldNotReachHere();
2533     }
2534     _out->print_cr("** ["PTR_FORMAT", "PTR_FORMAT"] top: "PTR_FORMAT" "
2535                    "TAMS: "PTR_FORMAT, b, e, t, p);
2536     _out->cr();
2537 
2538     HeapWord* from = b;
2539     HeapWord* to   = t;
2540 
2541     if (to > from) {
2542       _out->print_cr("Objects in ["PTR_FORMAT", "PTR_FORMAT"]", from, to);
2543       _out->cr();
2544       PrintReachableObjectClosure ocl(_out, _vo, _all, hr);
2545       hr->object_iterate_mem_careful(MemRegion(from, to), &ocl);
2546       _out->cr();
2547     }
2548 
2549     return false;
2550   }
2551 
2552   PrintReachableRegionClosure(outputStream* out,
2553                               VerifyOption  vo,
2554                               bool          all) :
2555     _out(out), _vo(vo), _all(all) { }
2556 };
2557 
2558 static const char* verify_option_to_tams(VerifyOption vo) {
2559   switch (vo) {
2560     case VerifyOption_G1UsePrevMarking:
2561       return "PTAMS";
2562     case VerifyOption_G1UseNextMarking:
2563       return "NTAMS";
2564     default:
2565       return "NONE";
2566   }
2567 }
2568 
2569 void ConcurrentMark::print_reachable(const char* str,
2570                                      VerifyOption vo,
2571                                      bool all) {
2572   gclog_or_tty->cr();
2573   gclog_or_tty->print_cr("== Doing heap dump... ");
2574 
2575   if (G1PrintReachableBaseFile == NULL) {
2576     gclog_or_tty->print_cr("  #### error: no base file defined");
2577     return;
2578   }
2579 
2580   if (strlen(G1PrintReachableBaseFile) + 1 + strlen(str) >
2581       (JVM_MAXPATHLEN - 1)) {
2582     gclog_or_tty->print_cr("  #### error: file name too long");
2583     return;
2584   }
2585 
2586   char file_name[JVM_MAXPATHLEN];
2587   sprintf(file_name, "%s.%s", G1PrintReachableBaseFile, str);
2588   gclog_or_tty->print_cr("  dumping to file %s", file_name);
2589 
2590   fileStream fout(file_name);
2591   if (!fout.is_open()) {
2592     gclog_or_tty->print_cr("  #### error: could not open file");
2593     return;
2594   }
2595 
2596   outputStream* out = &fout;
2597   out->print_cr("-- USING %s", verify_option_to_tams(vo));
2598   out->cr();
2599 
2600   out->print_cr("--- ITERATING OVER REGIONS");
2601   out->cr();
2602   PrintReachableRegionClosure rcl(out, vo, all);
2603   _g1h->heap_region_iterate(&rcl);
2604   out->cr();
2605 
2606   gclog_or_tty->print_cr("  done");
2607   gclog_or_tty->flush();
2608 }
2609 
2610 #endif // PRODUCT
2611 
2612 // This note is for drainAllSATBBuffers and the code in between.
2613 // In the future we could reuse a task to do this work during an
2614 // evacuation pause (since now tasks are not active and can be claimed
2615 // during an evacuation pause). This was a late change to the code and
2616 // is currently not being taken advantage of.
2617 
2618 class CMGlobalObjectClosure : public ObjectClosure {
2619 private:
2620   ConcurrentMark* _cm;
2621 
2622 public:
2623   void do_object(oop obj) {
2624     _cm->deal_with_reference(obj);
2625   }
2626 
2627   CMGlobalObjectClosure(ConcurrentMark* cm) : _cm(cm) { }
2628 };
2629 
2630 void ConcurrentMark::deal_with_reference(oop obj) {
2631   if (verbose_high()) {
2632     gclog_or_tty->print_cr("[global] we're dealing with reference "PTR_FORMAT,
2633                            (void*) obj);
2634   }
2635 
2636   HeapWord* objAddr = (HeapWord*) obj;
2637   assert(obj->is_oop_or_null(true /* ignore mark word */), "Error");
2638   if (_g1h->is_in_g1_reserved(objAddr)) {
2639     assert(obj != NULL, "null check is implicit");
2640     if (!_nextMarkBitMap->isMarked(objAddr)) {
2641       // Only get the containing region if the object is not marked on the
2642       // bitmap (otherwise, it's a waste of time since we won't do
2643       // anything with it).
2644       HeapRegion* hr = _g1h->heap_region_containing_raw(obj);
2645       if (!hr->obj_allocated_since_next_marking(obj)) {
2646         if (verbose_high()) {
2647           gclog_or_tty->print_cr("[global] "PTR_FORMAT" is not considered "
2648                                  "marked", (void*) obj);
2649         }
2650 
2651         // we need to mark it first
2652         if (_nextMarkBitMap->parMark(objAddr)) {
2653           // No OrderAccess:store_load() is needed. It is implicit in the
2654           // CAS done in parMark(objAddr) above
2655           HeapWord* finger = _finger;
2656           if (objAddr < finger) {
2657             if (verbose_high()) {
2658               gclog_or_tty->print_cr("[global] below the global finger "
2659                                      "("PTR_FORMAT"), pushing it", finger);
2660             }
2661             if (!mark_stack_push(obj)) {
2662               if (verbose_low()) {
2663                 gclog_or_tty->print_cr("[global] global stack overflow during "
2664                                        "deal_with_reference");
2665               }
2666             }
2667           }
2668         }
2669       }
2670     }
2671   }
2672 }
2673 
2674 void ConcurrentMark::drainAllSATBBuffers() {
2675   CMGlobalObjectClosure oc(this);
2676   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
2677   satb_mq_set.set_closure(&oc);
2678 
2679   while (satb_mq_set.apply_closure_to_completed_buffer()) {
2680     if (verbose_medium()) {
2681       gclog_or_tty->print_cr("[global] processed an SATB buffer");
2682     }
2683   }
2684 
2685   // no need to check whether we should do this, as this is only
2686   // called during an evacuation pause
2687   satb_mq_set.iterate_closure_all_threads();
2688 
2689   satb_mq_set.set_closure(NULL);
2690   assert(satb_mq_set.completed_buffers_num() == 0, "invariant");
2691 }
2692 
2693 void ConcurrentMark::markPrev(oop p) {
2694   // Note we are overriding the read-only view of the prev map here, via
2695   // the cast.
2696   ((CMBitMap*)_prevMarkBitMap)->mark((HeapWord*)p);
2697 }
2698 
2699 void ConcurrentMark::clear(oop p) {
2700   assert(p != NULL && p->is_oop(), "expected an oop");
2701   HeapWord* addr = (HeapWord*)p;
2702   assert(addr >= _nextMarkBitMap->startWord() ||
2703          addr < _nextMarkBitMap->endWord(), "in a region");
2704 
2705   _nextMarkBitMap->clear(addr);
2706 }
2707 
2708 void ConcurrentMark::clearRangeBothMaps(MemRegion mr) {
2709   // Note we are overriding the read-only view of the prev map here, via
2710   // the cast.
2711   ((CMBitMap*)_prevMarkBitMap)->clearRange(mr);
2712   _nextMarkBitMap->clearRange(mr);
2713 }
2714 
2715 HeapRegion*
2716 ConcurrentMark::claim_region(int task_num) {
2717   // "checkpoint" the finger
2718   HeapWord* finger = _finger;
2719 
2720   // _heap_end will not change underneath our feet; it only changes at
2721   // yield points.
2722   while (finger < _heap_end) {
2723     assert(_g1h->is_in_g1_reserved(finger), "invariant");
2724 
2725     // Note on how this code handles humongous regions. In the
2726     // normal case the finger will reach the start of a "starts
2727     // humongous" (SH) region. Its end will either be the end of the
2728     // last "continues humongous" (CH) region in the sequence, or the
2729     // standard end of the SH region (if the SH is the only region in
2730     // the sequence). That way claim_region() will skip over the CH
2731     // regions. However, there is a subtle race between a CM thread
2732     // executing this method and a mutator thread doing a humongous
2733     // object allocation. The two are not mutually exclusive as the CM
2734     // thread does not need to hold the Heap_lock when it gets
2735     // here. So there is a chance that claim_region() will come across
2736     // a free region that's in the progress of becoming a SH or a CH
2737     // region. In the former case, it will either
2738     //   a) Miss the update to the region's end, in which case it will
2739     //      visit every subsequent CH region, will find their bitmaps
2740     //      empty, and do nothing, or
2741     //   b) Will observe the update of the region's end (in which case
2742     //      it will skip the subsequent CH regions).
2743     // If it comes across a region that suddenly becomes CH, the
2744     // scenario will be similar to b). So, the race between
2745     // claim_region() and a humongous object allocation might force us
2746     // to do a bit of unnecessary work (due to some unnecessary bitmap
2747     // iterations) but it should not introduce and correctness issues.
2748     HeapRegion* curr_region   = _g1h->heap_region_containing_raw(finger);
2749     HeapWord*   bottom        = curr_region->bottom();
2750     HeapWord*   end           = curr_region->end();
2751     HeapWord*   limit         = curr_region->next_top_at_mark_start();
2752 
2753     if (verbose_low()) {
2754       gclog_or_tty->print_cr("[%d] curr_region = "PTR_FORMAT" "
2755                              "["PTR_FORMAT", "PTR_FORMAT"), "
2756                              "limit = "PTR_FORMAT,
2757                              task_num, curr_region, bottom, end, limit);
2758     }
2759 
2760     // Is the gap between reading the finger and doing the CAS too long?
2761     HeapWord* res = (HeapWord*) Atomic::cmpxchg_ptr(end, &_finger, finger);
2762     if (res == finger) {
2763       // we succeeded
2764 
2765       // notice that _finger == end cannot be guaranteed here since,
2766       // someone else might have moved the finger even further
2767       assert(_finger >= end, "the finger should have moved forward");
2768 
2769       if (verbose_low()) {
2770         gclog_or_tty->print_cr("[%d] we were successful with region = "
2771                                PTR_FORMAT, task_num, curr_region);
2772       }
2773 
2774       if (limit > bottom) {
2775         if (verbose_low()) {
2776           gclog_or_tty->print_cr("[%d] region "PTR_FORMAT" is not empty, "
2777                                  "returning it ", task_num, curr_region);
2778         }
2779         return curr_region;
2780       } else {
2781         assert(limit == bottom,
2782                "the region limit should be at bottom");
2783         if (verbose_low()) {
2784           gclog_or_tty->print_cr("[%d] region "PTR_FORMAT" is empty, "
2785                                  "returning NULL", task_num, curr_region);
2786         }
2787         // we return NULL and the caller should try calling
2788         // claim_region() again.
2789         return NULL;
2790       }
2791     } else {
2792       assert(_finger > finger, "the finger should have moved forward");
2793       if (verbose_low()) {
2794         gclog_or_tty->print_cr("[%d] somebody else moved the finger, "
2795                                "global finger = "PTR_FORMAT", "
2796                                "our finger = "PTR_FORMAT,
2797                                task_num, _finger, finger);
2798       }
2799 
2800       // read it again
2801       finger = _finger;
2802     }
2803   }
2804 
2805   return NULL;
2806 }
2807 
2808 bool ConcurrentMark::invalidate_aborted_regions_in_cset() {
2809   bool result = false;
2810   for (int i = 0; i < (int)_max_task_num; ++i) {
2811     CMTask* the_task = _tasks[i];
2812     MemRegion mr = the_task->aborted_region();
2813     if (mr.start() != NULL) {
2814       assert(mr.end() != NULL, "invariant");
2815       assert(mr.word_size() > 0, "invariant");
2816       HeapRegion* hr = _g1h->heap_region_containing(mr.start());
2817       assert(hr != NULL, "invariant");
2818       if (hr->in_collection_set()) {
2819         // The region points into the collection set
2820         the_task->set_aborted_region(MemRegion());
2821         result = true;
2822       }
2823     }
2824   }
2825   return result;
2826 }
2827 
2828 bool ConcurrentMark::has_aborted_regions() {
2829   for (int i = 0; i < (int)_max_task_num; ++i) {
2830     CMTask* the_task = _tasks[i];
2831     MemRegion mr = the_task->aborted_region();
2832     if (mr.start() != NULL) {
2833       assert(mr.end() != NULL, "invariant");
2834       assert(mr.word_size() > 0, "invariant");
2835       return true;
2836     }
2837   }
2838   return false;
2839 }
2840 
2841 void ConcurrentMark::oops_do(OopClosure* cl) {
2842   if (_markStack.size() > 0 && verbose_low()) {
2843     gclog_or_tty->print_cr("[global] scanning the global marking stack, "
2844                            "size = %d", _markStack.size());
2845   }
2846   // we first iterate over the contents of the mark stack...
2847   _markStack.oops_do(cl);
2848 
2849   for (int i = 0; i < (int)_max_task_num; ++i) {
2850     OopTaskQueue* queue = _task_queues->queue((int)i);
2851 
2852     if (queue->size() > 0 && verbose_low()) {
2853       gclog_or_tty->print_cr("[global] scanning task queue of task %d, "
2854                              "size = %d", i, queue->size());
2855     }
2856 
2857     // ...then over the contents of the all the task queues.
2858     queue->oops_do(cl);
2859   }
2860 
2861   // Invalidate any entries, that are in the region stack, that
2862   // point into the collection set
2863   if (_regionStack.invalidate_entries_into_cset()) {
2864     // otherwise, any gray objects copied during the evacuation pause
2865     // might not be visited.
2866     assert(_should_gray_objects, "invariant");
2867   }
2868 
2869   // Invalidate any aborted regions, recorded in the individual CM
2870   // tasks, that point into the collection set.
2871   if (invalidate_aborted_regions_in_cset()) {
2872     // otherwise, any gray objects copied during the evacuation pause
2873     // might not be visited.
2874     assert(_should_gray_objects, "invariant");
2875   }
2876 
2877 }
2878 
2879 void ConcurrentMark::clear_marking_state(bool clear_overflow) {
2880   _markStack.setEmpty();
2881   _markStack.clear_overflow();
2882   _regionStack.setEmpty();
2883   _regionStack.clear_overflow();
2884   if (clear_overflow) {
2885     clear_has_overflown();
2886   } else {
2887     assert(has_overflown(), "pre-condition");
2888   }
2889   _finger = _heap_start;
2890 
2891   for (int i = 0; i < (int)_max_task_num; ++i) {
2892     OopTaskQueue* queue = _task_queues->queue(i);
2893     queue->set_empty();
2894     // Clear any partial regions from the CMTasks
2895     _tasks[i]->clear_aborted_region();
2896   }
2897 }
2898 
2899 void ConcurrentMark::print_stats() {
2900   if (verbose_stats()) {
2901     gclog_or_tty->print_cr("---------------------------------------------------------------------");
2902     for (size_t i = 0; i < _active_tasks; ++i) {
2903       _tasks[i]->print_stats();
2904       gclog_or_tty->print_cr("---------------------------------------------------------------------");
2905     }
2906   }
2907 }
2908 
2909 // Closures used by ConcurrentMark::complete_marking_in_collection_set().
2910 
2911 class CSetMarkOopClosure: public OopClosure {
2912   friend class CSetMarkBitMapClosure;
2913 
2914   G1CollectedHeap* _g1h;
2915   CMBitMap*        _bm;
2916   ConcurrentMark*  _cm;
2917   oop*             _ms;
2918   jint*            _array_ind_stack;
2919   int              _ms_size;
2920   int              _ms_ind;
2921   int              _array_increment;
2922   int              _worker_i;
2923 
2924   bool push(oop obj, int arr_ind = 0) {
2925     if (_ms_ind == _ms_size) {
2926       gclog_or_tty->print_cr("Mark stack is full.");
2927       return false;
2928     }
2929     _ms[_ms_ind] = obj;
2930     if (obj->is_objArray()) {
2931       _array_ind_stack[_ms_ind] = arr_ind;
2932     }
2933     _ms_ind++;
2934     return true;
2935   }
2936 
2937   oop pop() {
2938     if (_ms_ind == 0) {
2939       return NULL;
2940     } else {
2941       _ms_ind--;
2942       return _ms[_ms_ind];
2943     }
2944   }
2945 
2946   template <class T> bool drain() {
2947     while (_ms_ind > 0) {
2948       oop obj = pop();
2949       assert(obj != NULL, "Since index was non-zero.");
2950       if (obj->is_objArray()) {
2951         jint arr_ind = _array_ind_stack[_ms_ind];
2952         objArrayOop aobj = objArrayOop(obj);
2953         jint len = aobj->length();
2954         jint next_arr_ind = arr_ind + _array_increment;
2955         if (next_arr_ind < len) {
2956           push(obj, next_arr_ind);
2957         }
2958         // Now process this portion of this one.
2959         int lim = MIN2(next_arr_ind, len);
2960         for (int j = arr_ind; j < lim; j++) {
2961           do_oop(aobj->objArrayOopDesc::obj_at_addr<T>(j));
2962         }
2963       } else {
2964         obj->oop_iterate(this);
2965       }
2966       if (abort()) return false;
2967     }
2968     return true;
2969   }
2970 
2971 public:
2972   CSetMarkOopClosure(ConcurrentMark* cm, int ms_size, int worker_i) :
2973     _g1h(G1CollectedHeap::heap()),
2974     _cm(cm),
2975     _bm(cm->nextMarkBitMap()),
2976     _ms_size(ms_size), _ms_ind(0),
2977     _ms(NEW_C_HEAP_ARRAY(oop, ms_size)),
2978     _array_ind_stack(NEW_C_HEAP_ARRAY(jint, ms_size)),
2979     _array_increment(MAX2(ms_size/8, 16)),
2980     _worker_i(worker_i) { }
2981 
2982   ~CSetMarkOopClosure() {
2983     FREE_C_HEAP_ARRAY(oop, _ms);
2984     FREE_C_HEAP_ARRAY(jint, _array_ind_stack);
2985   }
2986 
2987   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
2988   virtual void do_oop(      oop* p) { do_oop_work(p); }
2989 
2990   template <class T> void do_oop_work(T* p) {
2991     T heap_oop = oopDesc::load_heap_oop(p);
2992     if (oopDesc::is_null(heap_oop)) return;
2993     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
2994     if (obj->is_forwarded()) {
2995       // If the object has already been forwarded, we have to make sure
2996       // that it's marked.  So follow the forwarding pointer.  Note that
2997       // this does the right thing for self-forwarding pointers in the
2998       // evacuation failure case.
2999       obj = obj->forwardee();
3000     }
3001     HeapRegion* hr = _g1h->heap_region_containing(obj);
3002     if (hr != NULL) {
3003       if (hr->in_collection_set()) {
3004         if (_g1h->is_obj_ill(obj)) {
3005           if (_bm->parMark((HeapWord*)obj)) {
3006             if (!push(obj)) {
3007               gclog_or_tty->print_cr("Setting abort in CSetMarkOopClosure because push failed.");
3008               set_abort();
3009             }
3010           }
3011         }
3012       } else {
3013         // Outside the collection set; we need to gray it
3014         _cm->deal_with_reference(obj);
3015       }
3016     }
3017   }
3018 };
3019 
3020 class CSetMarkBitMapClosure: public BitMapClosure {
3021   G1CollectedHeap*   _g1h;
3022   CMBitMap*          _bitMap;
3023   ConcurrentMark*    _cm;
3024   CSetMarkOopClosure _oop_cl;
3025   int                _worker_i;
3026 
3027 public:
3028   CSetMarkBitMapClosure(ConcurrentMark* cm, int ms_size, int worker_i) :
3029     _g1h(G1CollectedHeap::heap()),
3030     _bitMap(cm->nextMarkBitMap()),
3031     _oop_cl(cm, ms_size, worker_i),
3032     _worker_i(worker_i) { }
3033 
3034   bool do_bit(size_t offset) {
3035     // convert offset into a HeapWord*
3036     HeapWord* addr = _bitMap->offsetToHeapWord(offset);
3037     assert(_bitMap->endWord() && addr < _bitMap->endWord(),
3038            "address out of range");
3039     assert(_bitMap->isMarked(addr), "tautology");
3040     oop obj = oop(addr);
3041     if (!obj->is_forwarded()) {
3042       if (!_oop_cl.push(obj)) return false;
3043       if (UseCompressedOops) {
3044         if (!_oop_cl.drain<narrowOop>()) return false;
3045       } else {
3046         if (!_oop_cl.drain<oop>()) return false;
3047       }
3048     }
3049     // Otherwise...
3050     return true;
3051   }
3052 };
3053 
3054 class CompleteMarkingInCSetHRClosure: public HeapRegionClosure {
3055   CMBitMap*             _bm;
3056   CSetMarkBitMapClosure _bit_cl;
3057   int                   _worker_i;
3058 
3059   enum SomePrivateConstants {
3060     MSSize = 1000
3061   };
3062 
3063 public:
3064   CompleteMarkingInCSetHRClosure(ConcurrentMark* cm, int worker_i) :
3065     _bm(cm->nextMarkBitMap()),
3066     _bit_cl(cm, MSSize, worker_i),
3067     _worker_i(worker_i) { }
3068 
3069   bool doHeapRegion(HeapRegion* hr) {
3070     if (hr->claimHeapRegion(HeapRegion::CompleteMarkCSetClaimValue)) {
3071       // The current worker has successfully claimed the region.
3072       if (!hr->evacuation_failed()) {
3073         MemRegion mr = MemRegion(hr->bottom(), hr->next_top_at_mark_start());
3074         if (!mr.is_empty()) {
3075           bool done = false;
3076           while (!done) {
3077             done = _bm->iterate(&_bit_cl, mr);
3078           }
3079         }
3080       }
3081     }
3082     return false;
3083   }
3084 };
3085 
3086 class SetClaimValuesInCSetHRClosure: public HeapRegionClosure {
3087   jint _claim_value;
3088 
3089 public:
3090   SetClaimValuesInCSetHRClosure(jint claim_value) :
3091     _claim_value(claim_value) { }
3092 
3093   bool doHeapRegion(HeapRegion* hr) {
3094     hr->set_claim_value(_claim_value);
3095     return false;
3096   }
3097 };
3098 
3099 class G1ParCompleteMarkInCSetTask: public AbstractGangTask {
3100 protected:
3101   G1CollectedHeap* _g1h;
3102   ConcurrentMark*  _cm;
3103 
3104 public:
3105   G1ParCompleteMarkInCSetTask(G1CollectedHeap* g1h,
3106                               ConcurrentMark* cm) :
3107     AbstractGangTask("Complete Mark in CSet"),
3108     _g1h(g1h), _cm(cm) { }
3109 
3110   void work(int worker_i) {
3111     CompleteMarkingInCSetHRClosure cmplt(_cm, worker_i);
3112     HeapRegion* hr = _g1h->start_cset_region_for_worker(worker_i);
3113     _g1h->collection_set_iterate_from(hr, &cmplt);
3114   }
3115 };
3116 
3117 void ConcurrentMark::complete_marking_in_collection_set() {
3118   G1CollectedHeap* g1h =  G1CollectedHeap::heap();
3119 
3120   if (!g1h->mark_in_progress()) {
3121     g1h->g1_policy()->record_mark_closure_time(0.0);
3122     return;
3123   }
3124 
3125   double start = os::elapsedTime();


3126   G1ParCompleteMarkInCSetTask complete_mark_task(g1h, this);
3127 
3128   assert(g1h->check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity");
3129 
3130   if (G1CollectedHeap::use_parallel_gc_threads()) {
3131     int n_workers = g1h->workers()->active_workers();
3132     g1h->set_par_threads(n_workers);
3133     g1h->workers()->run_task(&complete_mark_task);
3134     g1h->set_par_threads(0);
3135   } else {
3136     complete_mark_task.work(0);
3137   }
3138 
3139   assert(g1h->check_cset_heap_region_claim_values(HeapRegion::CompleteMarkCSetClaimValue), "sanity");
3140 
3141   // Now reset the claim values in the regions in the collection set.
3142   SetClaimValuesInCSetHRClosure set_cv_cl(HeapRegion::InitialClaimValue);
3143   g1h->collection_set_iterate(&set_cv_cl);
3144 
3145   assert(g1h->check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity");
3146 
3147   double end_time = os::elapsedTime();
3148   double elapsed_time_ms = (end_time - start) * 1000.0;
3149   g1h->g1_policy()->record_mark_closure_time(elapsed_time_ms);
3150 }
3151 
3152 // The next two methods deal with the following optimisation. Some
3153 // objects are gray by being marked and located above the finger. If
3154 // they are copied, during an evacuation pause, below the finger then
3155 // the need to be pushed on the stack. The observation is that, if
3156 // there are no regions in the collection set located above the
3157 // finger, then the above cannot happen, hence we do not need to
3158 // explicitly gray any objects when copying them to below the
3159 // finger. The global stack will be scanned to ensure that, if it
3160 // points to objects being copied, it will update their
3161 // location. There is a tricky situation with the gray objects in
3162 // region stack that are being coped, however. See the comment in
3163 // newCSet().
3164 
3165 void ConcurrentMark::newCSet() {
3166   if (!concurrent_marking_in_progress()) {
3167     // nothing to do if marking is not in progress
3168     return;
3169   }
3170 
3171   // find what the lowest finger is among the global and local fingers
3172   _min_finger = _finger;
3173   for (int i = 0; i < (int)_max_task_num; ++i) {
3174     CMTask* task = _tasks[i];
3175     HeapWord* task_finger = task->finger();
3176     if (task_finger != NULL && task_finger < _min_finger) {
3177       _min_finger = task_finger;
3178     }
3179   }
3180 
3181   _should_gray_objects = false;
3182 
3183   // This fixes a very subtle and fustrating bug. It might be the case
3184   // that, during en evacuation pause, heap regions that contain
3185   // objects that are gray (by being in regions contained in the
3186   // region stack) are included in the collection set. Since such gray
3187   // objects will be moved, and because it's not easy to redirect
3188   // region stack entries to point to a new location (because objects
3189   // in one region might be scattered to multiple regions after they
3190   // are copied), one option is to ensure that all marked objects
3191   // copied during a pause are pushed on the stack. Notice, however,
3192   // that this problem can only happen when the region stack is not
3193   // empty during an evacuation pause. So, we make the fix a bit less
3194   // conservative and ensure that regions are pushed on the stack,
3195   // irrespective whether all collection set regions are below the
3196   // finger, if the region stack is not empty. This is expected to be
3197   // a rare case, so I don't think it's necessary to be smarted about it.
3198   if (!region_stack_empty() || has_aborted_regions()) {
3199     _should_gray_objects = true;
3200   }
3201 }
3202 
3203 void ConcurrentMark::registerCSetRegion(HeapRegion* hr) {
3204   if (!concurrent_marking_in_progress()) return;
3205 
3206   HeapWord* region_end = hr->end();
3207   if (region_end > _min_finger) {
3208     _should_gray_objects = true;
3209   }
3210 }
3211 
3212 // Resets the region fields of active CMTasks whose values point
3213 // into the collection set.
3214 void ConcurrentMark::reset_active_task_region_fields_in_cset() {
3215   assert(SafepointSynchronize::is_at_safepoint(), "should be in STW");
3216   assert(parallel_marking_threads() <= _max_task_num, "sanity");
3217 
3218   for (int i = 0; i < (int)parallel_marking_threads(); i += 1) {
3219     CMTask* task = _tasks[i];
3220     HeapWord* task_finger = task->finger();
3221     if (task_finger != NULL) {
3222       assert(_g1h->is_in_g1_reserved(task_finger), "not in heap");
3223       HeapRegion* finger_region = _g1h->heap_region_containing(task_finger);
3224       if (finger_region->in_collection_set()) {
3225         // The task's current region is in the collection set.
3226         // This region will be evacuated in the current GC and
3227         // the region fields in the task will be stale.
3228         task->giveup_current_region();
3229       }
3230     }
3231   }
3232 }
3233 
3234 // abandon current marking iteration due to a Full GC
3235 void ConcurrentMark::abort() {
3236   // Clear all marks to force marking thread to do nothing
3237   _nextMarkBitMap->clearAll();
3238   // Empty mark stack
3239   clear_marking_state();
3240   for (int i = 0; i < (int)_max_task_num; ++i) {
3241     _tasks[i]->clear_region_fields();
3242   }
3243   _has_aborted = true;
3244 
3245   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
3246   satb_mq_set.abandon_partial_marking();
3247   // This can be called either during or outside marking, we'll read
3248   // the expected_active value from the SATB queue set.
3249   satb_mq_set.set_active_all_threads(
3250                                  false, /* new active value */
3251                                  satb_mq_set.is_active() /* expected_active */);
3252 }
3253 
3254 static void print_ms_time_info(const char* prefix, const char* name,
3255                                NumberSeq& ns) {
3256   gclog_or_tty->print_cr("%s%5d %12s: total time = %8.2f s (avg = %8.2f ms).",
3257                          prefix, ns.num(), name, ns.sum()/1000.0, ns.avg());
3258   if (ns.num() > 0) {
3259     gclog_or_tty->print_cr("%s         [std. dev = %8.2f ms, max = %8.2f ms]",
3260                            prefix, ns.sd(), ns.maximum());
3261   }
3262 }
3263 
3264 void ConcurrentMark::print_summary_info() {
3265   gclog_or_tty->print_cr(" Concurrent marking:");
3266   print_ms_time_info("  ", "init marks", _init_times);
3267   print_ms_time_info("  ", "remarks", _remark_times);
3268   {
3269     print_ms_time_info("     ", "final marks", _remark_mark_times);
3270     print_ms_time_info("     ", "weak refs", _remark_weak_ref_times);
3271 
3272   }
3273   print_ms_time_info("  ", "cleanups", _cleanup_times);
3274   gclog_or_tty->print_cr("    Final counting total time = %8.2f s (avg = %8.2f ms).",
3275                          _total_counting_time,
3276                          (_cleanup_times.num() > 0 ? _total_counting_time * 1000.0 /
3277                           (double)_cleanup_times.num()
3278                          : 0.0));
3279   if (G1ScrubRemSets) {
3280     gclog_or_tty->print_cr("    RS scrub total time = %8.2f s (avg = %8.2f ms).",
3281                            _total_rs_scrub_time,
3282                            (_cleanup_times.num() > 0 ? _total_rs_scrub_time * 1000.0 /
3283                             (double)_cleanup_times.num()
3284                            : 0.0));
3285   }
3286   gclog_or_tty->print_cr("  Total stop_world time = %8.2f s.",
3287                          (_init_times.sum() + _remark_times.sum() +
3288                           _cleanup_times.sum())/1000.0);
3289   gclog_or_tty->print_cr("  Total concurrent time = %8.2f s "
3290                 "(%8.2f s marking, %8.2f s counting).",
3291                 cmThread()->vtime_accum(),
3292                 cmThread()->vtime_mark_accum(),
3293                 cmThread()->vtime_count_accum());
3294 }
3295 
3296 void ConcurrentMark::print_worker_threads_on(outputStream* st) const {
3297   _parallel_workers->print_worker_threads_on(st);
3298 }
3299 
3300 // Closures
3301 // XXX: there seems to be a lot of code  duplication here;
3302 // should refactor and consolidate the shared code.
3303 
3304 // This closure is used to mark refs into the CMS generation in
3305 // the CMS bit map. Called at the first checkpoint.
3306 
3307 // We take a break if someone is trying to stop the world.
3308 bool ConcurrentMark::do_yield_check(int worker_i) {
3309   if (should_yield()) {
3310     if (worker_i == 0) {
3311       _g1h->g1_policy()->record_concurrent_pause();
3312     }
3313     cmThread()->yield();
3314     if (worker_i == 0) {
3315       _g1h->g1_policy()->record_concurrent_pause_end();
3316     }
3317     return true;
3318   } else {
3319     return false;
3320   }
3321 }
3322 
3323 bool ConcurrentMark::should_yield() {
3324   return cmThread()->should_yield();
3325 }
3326 
3327 bool ConcurrentMark::containing_card_is_marked(void* p) {
3328   size_t offset = pointer_delta(p, _g1h->reserved_region().start(), 1);
3329   return _card_bm.at(offset >> CardTableModRefBS::card_shift);
3330 }
3331 
3332 bool ConcurrentMark::containing_cards_are_marked(void* start,
3333                                                  void* last) {
3334   return containing_card_is_marked(start) &&
3335          containing_card_is_marked(last);
3336 }
3337 
3338 #ifndef PRODUCT
3339 // for debugging purposes
3340 void ConcurrentMark::print_finger() {
3341   gclog_or_tty->print_cr("heap ["PTR_FORMAT", "PTR_FORMAT"), global finger = "PTR_FORMAT,
3342                          _heap_start, _heap_end, _finger);
3343   for (int i = 0; i < (int) _max_task_num; ++i) {
3344     gclog_or_tty->print("   %d: "PTR_FORMAT, i, _tasks[i]->finger());
3345   }
3346   gclog_or_tty->print_cr("");
3347 }
3348 #endif
3349 
3350 void CMTask::scan_object(oop obj) {
3351   assert(_nextMarkBitMap->isMarked((HeapWord*) obj), "invariant");
3352 
3353   if (_cm->verbose_high()) {
3354     gclog_or_tty->print_cr("[%d] we're scanning object "PTR_FORMAT,
3355                            _task_id, (void*) obj);
3356   }
3357 
3358   size_t obj_size = obj->size();
3359   _words_scanned += obj_size;
3360 
3361   obj->oop_iterate(_cm_oop_closure);
3362   statsOnly( ++_objs_scanned );
3363   check_limits();
3364 }
3365 
3366 // Closure for iteration over bitmaps
3367 class CMBitMapClosure : public BitMapClosure {
3368 private:
3369   // the bitmap that is being iterated over
3370   CMBitMap*                   _nextMarkBitMap;
3371   ConcurrentMark*             _cm;
3372   CMTask*                     _task;
3373   // true if we're scanning a heap region claimed by the task (so that
3374   // we move the finger along), false if we're not, i.e. currently when
3375   // scanning a heap region popped from the region stack (so that we
3376   // do not move the task finger along; it'd be a mistake if we did so).
3377   bool                        _scanning_heap_region;
3378 
3379 public:
3380   CMBitMapClosure(CMTask *task,
3381                   ConcurrentMark* cm,
3382                   CMBitMap* nextMarkBitMap)
3383     :  _task(task), _cm(cm), _nextMarkBitMap(nextMarkBitMap) { }
3384 
3385   void set_scanning_heap_region(bool scanning_heap_region) {
3386     _scanning_heap_region = scanning_heap_region;
3387   }
3388 
3389   bool do_bit(size_t offset) {
3390     HeapWord* addr = _nextMarkBitMap->offsetToHeapWord(offset);
3391     assert(_nextMarkBitMap->isMarked(addr), "invariant");
3392     assert( addr < _cm->finger(), "invariant");
3393 
3394     if (_scanning_heap_region) {
3395       statsOnly( _task->increase_objs_found_on_bitmap() );
3396       assert(addr >= _task->finger(), "invariant");
3397       // We move that task's local finger along.
3398       _task->move_finger_to(addr);
3399     } else {
3400       // We move the task's region finger along.
3401       _task->move_region_finger_to(addr);
3402     }
3403 
3404     _task->scan_object(oop(addr));
3405     // we only partially drain the local queue and global stack
3406     _task->drain_local_queue(true);
3407     _task->drain_global_stack(true);
3408 
3409     // if the has_aborted flag has been raised, we need to bail out of
3410     // the iteration
3411     return !_task->has_aborted();
3412   }
3413 };
3414 
3415 // Closure for iterating over objects, currently only used for
3416 // processing SATB buffers.
3417 class CMObjectClosure : public ObjectClosure {
3418 private:
3419   CMTask* _task;
3420 
3421 public:
3422   void do_object(oop obj) {
3423     _task->deal_with_reference(obj);
3424   }
3425 
3426   CMObjectClosure(CMTask* task) : _task(task) { }
3427 };
3428 
3429 G1CMOopClosure::G1CMOopClosure(G1CollectedHeap* g1h,
3430                                ConcurrentMark* cm,
3431                                CMTask* task)
3432   : _g1h(g1h), _cm(cm), _task(task) {
3433   assert(_ref_processor == NULL, "should be initialized to NULL");
3434 
3435   if (G1UseConcMarkReferenceProcessing) {
3436     _ref_processor = g1h->ref_processor_cm();
3437     assert(_ref_processor != NULL, "should not be NULL");
3438   }
3439 }
3440 
3441 void CMTask::setup_for_region(HeapRegion* hr) {
3442   // Separated the asserts so that we know which one fires.
3443   assert(hr != NULL,
3444         "claim_region() should have filtered out continues humongous regions");
3445   assert(!hr->continuesHumongous(),
3446         "claim_region() should have filtered out continues humongous regions");
3447 
3448   if (_cm->verbose_low()) {
3449     gclog_or_tty->print_cr("[%d] setting up for region "PTR_FORMAT,
3450                            _task_id, hr);
3451   }
3452 
3453   _curr_region  = hr;
3454   _finger       = hr->bottom();
3455   update_region_limit();
3456 }
3457 
3458 void CMTask::update_region_limit() {
3459   HeapRegion* hr            = _curr_region;
3460   HeapWord* bottom          = hr->bottom();
3461   HeapWord* limit           = hr->next_top_at_mark_start();
3462 
3463   if (limit == bottom) {
3464     if (_cm->verbose_low()) {
3465       gclog_or_tty->print_cr("[%d] found an empty region "
3466                              "["PTR_FORMAT", "PTR_FORMAT")",
3467                              _task_id, bottom, limit);
3468     }
3469     // The region was collected underneath our feet.
3470     // We set the finger to bottom to ensure that the bitmap
3471     // iteration that will follow this will not do anything.
3472     // (this is not a condition that holds when we set the region up,
3473     // as the region is not supposed to be empty in the first place)
3474     _finger = bottom;
3475   } else if (limit >= _region_limit) {
3476     assert(limit >= _finger, "peace of mind");
3477   } else {
3478     assert(limit < _region_limit, "only way to get here");
3479     // This can happen under some pretty unusual circumstances.  An
3480     // evacuation pause empties the region underneath our feet (NTAMS
3481     // at bottom). We then do some allocation in the region (NTAMS
3482     // stays at bottom), followed by the region being used as a GC
3483     // alloc region (NTAMS will move to top() and the objects
3484     // originally below it will be grayed). All objects now marked in
3485     // the region are explicitly grayed, if below the global finger,
3486     // and we do not need in fact to scan anything else. So, we simply
3487     // set _finger to be limit to ensure that the bitmap iteration
3488     // doesn't do anything.
3489     _finger = limit;
3490   }
3491 
3492   _region_limit = limit;
3493 }
3494 
3495 void CMTask::giveup_current_region() {
3496   assert(_curr_region != NULL, "invariant");
3497   if (_cm->verbose_low()) {
3498     gclog_or_tty->print_cr("[%d] giving up region "PTR_FORMAT,
3499                            _task_id, _curr_region);
3500   }
3501   clear_region_fields();
3502 }
3503 
3504 void CMTask::clear_region_fields() {
3505   // Values for these three fields that indicate that we're not
3506   // holding on to a region.
3507   _curr_region   = NULL;
3508   _finger        = NULL;
3509   _region_limit  = NULL;
3510 
3511   _region_finger = NULL;
3512 }
3513 
3514 void CMTask::set_cm_oop_closure(G1CMOopClosure* cm_oop_closure) {
3515   if (cm_oop_closure == NULL) {
3516     assert(_cm_oop_closure != NULL, "invariant");
3517   } else {
3518     assert(_cm_oop_closure == NULL, "invariant");
3519   }
3520   _cm_oop_closure = cm_oop_closure;
3521 }
3522 
3523 void CMTask::reset(CMBitMap* nextMarkBitMap) {
3524   guarantee(nextMarkBitMap != NULL, "invariant");
3525 
3526   if (_cm->verbose_low()) {
3527     gclog_or_tty->print_cr("[%d] resetting", _task_id);
3528   }
3529 
3530   _nextMarkBitMap                = nextMarkBitMap;
3531   clear_region_fields();
3532   assert(_aborted_region.is_empty(), "should have been cleared");
3533 
3534   _calls                         = 0;
3535   _elapsed_time_ms               = 0.0;
3536   _termination_time_ms           = 0.0;
3537   _termination_start_time_ms     = 0.0;
3538 
3539 #if _MARKING_STATS_
3540   _local_pushes                  = 0;
3541   _local_pops                    = 0;
3542   _local_max_size                = 0;
3543   _objs_scanned                  = 0;
3544   _global_pushes                 = 0;
3545   _global_pops                   = 0;
3546   _global_max_size               = 0;
3547   _global_transfers_to           = 0;
3548   _global_transfers_from         = 0;
3549   _region_stack_pops             = 0;
3550   _regions_claimed               = 0;
3551   _objs_found_on_bitmap          = 0;
3552   _satb_buffers_processed        = 0;
3553   _steal_attempts                = 0;
3554   _steals                        = 0;
3555   _aborted                       = 0;
3556   _aborted_overflow              = 0;
3557   _aborted_cm_aborted            = 0;
3558   _aborted_yield                 = 0;
3559   _aborted_timed_out             = 0;
3560   _aborted_satb                  = 0;
3561   _aborted_termination           = 0;
3562 #endif // _MARKING_STATS_
3563 }
3564 
3565 bool CMTask::should_exit_termination() {
3566   regular_clock_call();
3567   // This is called when we are in the termination protocol. We should
3568   // quit if, for some reason, this task wants to abort or the global
3569   // stack is not empty (this means that we can get work from it).
3570   return !_cm->mark_stack_empty() || has_aborted();
3571 }
3572 
3573 void CMTask::reached_limit() {
3574   assert(_words_scanned >= _words_scanned_limit ||
3575          _refs_reached >= _refs_reached_limit ,
3576          "shouldn't have been called otherwise");
3577   regular_clock_call();
3578 }
3579 
3580 void CMTask::regular_clock_call() {
3581   if (has_aborted()) return;
3582 
3583   // First, we need to recalculate the words scanned and refs reached
3584   // limits for the next clock call.
3585   recalculate_limits();
3586 
3587   // During the regular clock call we do the following
3588 
3589   // (1) If an overflow has been flagged, then we abort.
3590   if (_cm->has_overflown()) {
3591     set_has_aborted();
3592     return;
3593   }
3594 
3595   // If we are not concurrent (i.e. we're doing remark) we don't need
3596   // to check anything else. The other steps are only needed during
3597   // the concurrent marking phase.
3598   if (!concurrent()) return;
3599 
3600   // (2) If marking has been aborted for Full GC, then we also abort.
3601   if (_cm->has_aborted()) {
3602     set_has_aborted();
3603     statsOnly( ++_aborted_cm_aborted );
3604     return;
3605   }
3606 
3607   double curr_time_ms = os::elapsedVTime() * 1000.0;
3608 
3609   // (3) If marking stats are enabled, then we update the step history.
3610 #if _MARKING_STATS_
3611   if (_words_scanned >= _words_scanned_limit) {
3612     ++_clock_due_to_scanning;
3613   }
3614   if (_refs_reached >= _refs_reached_limit) {
3615     ++_clock_due_to_marking;
3616   }
3617 
3618   double last_interval_ms = curr_time_ms - _interval_start_time_ms;
3619   _interval_start_time_ms = curr_time_ms;
3620   _all_clock_intervals_ms.add(last_interval_ms);
3621 
3622   if (_cm->verbose_medium()) {
3623       gclog_or_tty->print_cr("[%d] regular clock, interval = %1.2lfms, "
3624                         "scanned = %d%s, refs reached = %d%s",
3625                         _task_id, last_interval_ms,
3626                         _words_scanned,
3627                         (_words_scanned >= _words_scanned_limit) ? " (*)" : "",
3628                         _refs_reached,
3629                         (_refs_reached >= _refs_reached_limit) ? " (*)" : "");
3630   }
3631 #endif // _MARKING_STATS_
3632 
3633   // (4) We check whether we should yield. If we have to, then we abort.
3634   if (_cm->should_yield()) {
3635     // We should yield. To do this we abort the task. The caller is
3636     // responsible for yielding.
3637     set_has_aborted();
3638     statsOnly( ++_aborted_yield );
3639     return;
3640   }
3641 
3642   // (5) We check whether we've reached our time quota. If we have,
3643   // then we abort.
3644   double elapsed_time_ms = curr_time_ms - _start_time_ms;
3645   if (elapsed_time_ms > _time_target_ms) {
3646     set_has_aborted();
3647     _has_timed_out = true;
3648     statsOnly( ++_aborted_timed_out );
3649     return;
3650   }
3651 
3652   // (6) Finally, we check whether there are enough completed STAB
3653   // buffers available for processing. If there are, we abort.
3654   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
3655   if (!_draining_satb_buffers && satb_mq_set.process_completed_buffers()) {
3656     if (_cm->verbose_low()) {
3657       gclog_or_tty->print_cr("[%d] aborting to deal with pending SATB buffers",
3658                              _task_id);
3659     }
3660     // we do need to process SATB buffers, we'll abort and restart
3661     // the marking task to do so
3662     set_has_aborted();
3663     statsOnly( ++_aborted_satb );
3664     return;
3665   }
3666 }
3667 
3668 void CMTask::recalculate_limits() {
3669   _real_words_scanned_limit = _words_scanned + words_scanned_period;
3670   _words_scanned_limit      = _real_words_scanned_limit;
3671 
3672   _real_refs_reached_limit  = _refs_reached  + refs_reached_period;
3673   _refs_reached_limit       = _real_refs_reached_limit;
3674 }
3675 
3676 void CMTask::decrease_limits() {
3677   // This is called when we believe that we're going to do an infrequent
3678   // operation which will increase the per byte scanned cost (i.e. move
3679   // entries to/from the global stack). It basically tries to decrease the
3680   // scanning limit so that the clock is called earlier.
3681 
3682   if (_cm->verbose_medium()) {
3683     gclog_or_tty->print_cr("[%d] decreasing limits", _task_id);
3684   }
3685 
3686   _words_scanned_limit = _real_words_scanned_limit -
3687     3 * words_scanned_period / 4;
3688   _refs_reached_limit  = _real_refs_reached_limit -
3689     3 * refs_reached_period / 4;
3690 }
3691 
3692 void CMTask::move_entries_to_global_stack() {
3693   // local array where we'll store the entries that will be popped
3694   // from the local queue
3695   oop buffer[global_stack_transfer_size];
3696 
3697   int n = 0;
3698   oop obj;
3699   while (n < global_stack_transfer_size && _task_queue->pop_local(obj)) {
3700     buffer[n] = obj;
3701     ++n;
3702   }
3703 
3704   if (n > 0) {
3705     // we popped at least one entry from the local queue
3706 
3707     statsOnly( ++_global_transfers_to; _local_pops += n );
3708 
3709     if (!_cm->mark_stack_push(buffer, n)) {
3710       if (_cm->verbose_low()) {
3711         gclog_or_tty->print_cr("[%d] aborting due to global stack overflow",
3712                                _task_id);
3713       }
3714       set_has_aborted();
3715     } else {
3716       // the transfer was successful
3717 
3718       if (_cm->verbose_medium()) {
3719         gclog_or_tty->print_cr("[%d] pushed %d entries to the global stack",
3720                                _task_id, n);
3721       }
3722       statsOnly( int tmp_size = _cm->mark_stack_size();
3723                  if (tmp_size > _global_max_size) {
3724                    _global_max_size = tmp_size;
3725                  }
3726                  _global_pushes += n );
3727     }
3728   }
3729 
3730   // this operation was quite expensive, so decrease the limits
3731   decrease_limits();
3732 }
3733 
3734 void CMTask::get_entries_from_global_stack() {
3735   // local array where we'll store the entries that will be popped
3736   // from the global stack.
3737   oop buffer[global_stack_transfer_size];
3738   int n;
3739   _cm->mark_stack_pop(buffer, global_stack_transfer_size, &n);
3740   assert(n <= global_stack_transfer_size,
3741          "we should not pop more than the given limit");
3742   if (n > 0) {
3743     // yes, we did actually pop at least one entry
3744 
3745     statsOnly( ++_global_transfers_from; _global_pops += n );
3746     if (_cm->verbose_medium()) {
3747       gclog_or_tty->print_cr("[%d] popped %d entries from the global stack",
3748                              _task_id, n);
3749     }
3750     for (int i = 0; i < n; ++i) {
3751       bool success = _task_queue->push(buffer[i]);
3752       // We only call this when the local queue is empty or under a
3753       // given target limit. So, we do not expect this push to fail.
3754       assert(success, "invariant");
3755     }
3756 
3757     statsOnly( int tmp_size = _task_queue->size();
3758                if (tmp_size > _local_max_size) {
3759                  _local_max_size = tmp_size;
3760                }
3761                _local_pushes += n );
3762   }
3763 
3764   // this operation was quite expensive, so decrease the limits
3765   decrease_limits();
3766 }
3767 
3768 void CMTask::drain_local_queue(bool partially) {
3769   if (has_aborted()) return;
3770 
3771   // Decide what the target size is, depending whether we're going to
3772   // drain it partially (so that other tasks can steal if they run out
3773   // of things to do) or totally (at the very end).
3774   size_t target_size;
3775   if (partially) {
3776     target_size = MIN2((size_t)_task_queue->max_elems()/3, GCDrainStackTargetSize);
3777   } else {
3778     target_size = 0;
3779   }
3780 
3781   if (_task_queue->size() > target_size) {
3782     if (_cm->verbose_high()) {
3783       gclog_or_tty->print_cr("[%d] draining local queue, target size = %d",
3784                              _task_id, target_size);
3785     }
3786 
3787     oop obj;
3788     bool ret = _task_queue->pop_local(obj);
3789     while (ret) {
3790       statsOnly( ++_local_pops );
3791 
3792       if (_cm->verbose_high()) {
3793         gclog_or_tty->print_cr("[%d] popped "PTR_FORMAT, _task_id,
3794                                (void*) obj);
3795       }
3796 
3797       assert(_g1h->is_in_g1_reserved((HeapWord*) obj), "invariant" );
3798       assert(!_g1h->is_on_master_free_list(
3799                   _g1h->heap_region_containing((HeapWord*) obj)), "invariant");
3800 
3801       scan_object(obj);
3802 
3803       if (_task_queue->size() <= target_size || has_aborted()) {
3804         ret = false;
3805       } else {
3806         ret = _task_queue->pop_local(obj);
3807       }
3808     }
3809 
3810     if (_cm->verbose_high()) {
3811       gclog_or_tty->print_cr("[%d] drained local queue, size = %d",
3812                              _task_id, _task_queue->size());
3813     }
3814   }
3815 }
3816 
3817 void CMTask::drain_global_stack(bool partially) {
3818   if (has_aborted()) return;
3819 
3820   // We have a policy to drain the local queue before we attempt to
3821   // drain the global stack.
3822   assert(partially || _task_queue->size() == 0, "invariant");
3823 
3824   // Decide what the target size is, depending whether we're going to
3825   // drain it partially (so that other tasks can steal if they run out
3826   // of things to do) or totally (at the very end).  Notice that,
3827   // because we move entries from the global stack in chunks or
3828   // because another task might be doing the same, we might in fact
3829   // drop below the target. But, this is not a problem.
3830   size_t target_size;
3831   if (partially) {
3832     target_size = _cm->partial_mark_stack_size_target();
3833   } else {
3834     target_size = 0;
3835   }
3836 
3837   if (_cm->mark_stack_size() > target_size) {
3838     if (_cm->verbose_low()) {
3839       gclog_or_tty->print_cr("[%d] draining global_stack, target size %d",
3840                              _task_id, target_size);
3841     }
3842 
3843     while (!has_aborted() && _cm->mark_stack_size() > target_size) {
3844       get_entries_from_global_stack();
3845       drain_local_queue(partially);
3846     }
3847 
3848     if (_cm->verbose_low()) {
3849       gclog_or_tty->print_cr("[%d] drained global stack, size = %d",
3850                              _task_id, _cm->mark_stack_size());
3851     }
3852   }
3853 }
3854 
3855 // SATB Queue has several assumptions on whether to call the par or
3856 // non-par versions of the methods. this is why some of the code is
3857 // replicated. We should really get rid of the single-threaded version
3858 // of the code to simplify things.
3859 void CMTask::drain_satb_buffers() {
3860   if (has_aborted()) return;
3861 
3862   // We set this so that the regular clock knows that we're in the
3863   // middle of draining buffers and doesn't set the abort flag when it
3864   // notices that SATB buffers are available for draining. It'd be
3865   // very counter productive if it did that. :-)
3866   _draining_satb_buffers = true;
3867 
3868   CMObjectClosure oc(this);
3869   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
3870   if (G1CollectedHeap::use_parallel_gc_threads()) {
3871     satb_mq_set.set_par_closure(_task_id, &oc);
3872   } else {
3873     satb_mq_set.set_closure(&oc);
3874   }
3875 
3876   // This keeps claiming and applying the closure to completed buffers
3877   // until we run out of buffers or we need to abort.
3878   if (G1CollectedHeap::use_parallel_gc_threads()) {
3879     while (!has_aborted() &&
3880            satb_mq_set.par_apply_closure_to_completed_buffer(_task_id)) {
3881       if (_cm->verbose_medium()) {
3882         gclog_or_tty->print_cr("[%d] processed an SATB buffer", _task_id);
3883       }
3884       statsOnly( ++_satb_buffers_processed );
3885       regular_clock_call();
3886     }
3887   } else {
3888     while (!has_aborted() &&
3889            satb_mq_set.apply_closure_to_completed_buffer()) {
3890       if (_cm->verbose_medium()) {
3891         gclog_or_tty->print_cr("[%d] processed an SATB buffer", _task_id);
3892       }
3893       statsOnly( ++_satb_buffers_processed );
3894       regular_clock_call();
3895     }
3896   }
3897 
3898   if (!concurrent() && !has_aborted()) {
3899     // We should only do this during remark.
3900     if (G1CollectedHeap::use_parallel_gc_threads()) {
3901       satb_mq_set.par_iterate_closure_all_threads(_task_id);
3902     } else {
3903       satb_mq_set.iterate_closure_all_threads();
3904     }
3905   }
3906 
3907   _draining_satb_buffers = false;
3908 
3909   assert(has_aborted() ||
3910          concurrent() ||
3911          satb_mq_set.completed_buffers_num() == 0, "invariant");
3912 
3913   if (G1CollectedHeap::use_parallel_gc_threads()) {
3914     satb_mq_set.set_par_closure(_task_id, NULL);
3915   } else {
3916     satb_mq_set.set_closure(NULL);
3917   }
3918 
3919   // again, this was a potentially expensive operation, decrease the
3920   // limits to get the regular clock call early
3921   decrease_limits();
3922 }
3923 
3924 void CMTask::drain_region_stack(BitMapClosure* bc) {
3925   if (has_aborted()) return;
3926 
3927   assert(_region_finger == NULL,
3928          "it should be NULL when we're not scanning a region");
3929 
3930   if (!_cm->region_stack_empty() || !_aborted_region.is_empty()) {
3931     if (_cm->verbose_low()) {
3932       gclog_or_tty->print_cr("[%d] draining region stack, size = %d",
3933                              _task_id, _cm->region_stack_size());
3934     }
3935 
3936     MemRegion mr;
3937 
3938     if (!_aborted_region.is_empty()) {
3939       mr = _aborted_region;
3940       _aborted_region = MemRegion();
3941 
3942       if (_cm->verbose_low()) {
3943         gclog_or_tty->print_cr("[%d] scanning aborted region "
3944                                "[ " PTR_FORMAT ", " PTR_FORMAT " )",
3945                                _task_id, mr.start(), mr.end());
3946       }
3947     } else {
3948       mr = _cm->region_stack_pop_lock_free();
3949       // it returns MemRegion() if the pop fails
3950       statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
3951     }
3952 
3953     while (mr.start() != NULL) {
3954       if (_cm->verbose_medium()) {
3955         gclog_or_tty->print_cr("[%d] we are scanning region "
3956                                "["PTR_FORMAT", "PTR_FORMAT")",
3957                                _task_id, mr.start(), mr.end());
3958       }
3959 
3960       assert(mr.end() <= _cm->finger(),
3961              "otherwise the region shouldn't be on the stack");
3962       assert(!mr.is_empty(), "Only non-empty regions live on the region stack");
3963       if (_nextMarkBitMap->iterate(bc, mr)) {
3964         assert(!has_aborted(),
3965                "cannot abort the task without aborting the bitmap iteration");
3966 
3967         // We finished iterating over the region without aborting.
3968         regular_clock_call();
3969         if (has_aborted()) {
3970           mr = MemRegion();
3971         } else {
3972           mr = _cm->region_stack_pop_lock_free();
3973           // it returns MemRegion() if the pop fails
3974           statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
3975         }
3976       } else {
3977         assert(has_aborted(), "currently the only way to do so");
3978 
3979         // The only way to abort the bitmap iteration is to return
3980         // false from the do_bit() method. However, inside the
3981         // do_bit() method we move the _region_finger to point to the
3982         // object currently being looked at. So, if we bail out, we
3983         // have definitely set _region_finger to something non-null.
3984         assert(_region_finger != NULL, "invariant");
3985 
3986         // Make sure that any previously aborted region has been
3987         // cleared.
3988         assert(_aborted_region.is_empty(), "aborted region not cleared");
3989 
3990         // The iteration was actually aborted. So now _region_finger
3991         // points to the address of the object we last scanned. If we
3992         // leave it there, when we restart this task, we will rescan
3993         // the object. It is easy to avoid this. We move the finger by
3994         // enough to point to the next possible object header (the
3995         // bitmap knows by how much we need to move it as it knows its
3996         // granularity).
3997         MemRegion newRegion =
3998           MemRegion(_nextMarkBitMap->nextWord(_region_finger), mr.end());
3999 
4000         if (!newRegion.is_empty()) {
4001           if (_cm->verbose_low()) {
4002             gclog_or_tty->print_cr("[%d] recording unscanned region"
4003                                    "[" PTR_FORMAT "," PTR_FORMAT ") in CMTask",
4004                                    _task_id,
4005                                    newRegion.start(), newRegion.end());
4006           }
4007           // Now record the part of the region we didn't scan to
4008           // make sure this task scans it later.
4009           _aborted_region = newRegion;
4010         }
4011         // break from while
4012         mr = MemRegion();
4013       }
4014       _region_finger = NULL;
4015     }
4016 
4017     if (_cm->verbose_low()) {
4018       gclog_or_tty->print_cr("[%d] drained region stack, size = %d",
4019                              _task_id, _cm->region_stack_size());
4020     }
4021   }
4022 }
4023 
4024 void CMTask::print_stats() {
4025   gclog_or_tty->print_cr("Marking Stats, task = %d, calls = %d",
4026                          _task_id, _calls);
4027   gclog_or_tty->print_cr("  Elapsed time = %1.2lfms, Termination time = %1.2lfms",
4028                          _elapsed_time_ms, _termination_time_ms);
4029   gclog_or_tty->print_cr("  Step Times (cum): num = %d, avg = %1.2lfms, sd = %1.2lfms",
4030                          _step_times_ms.num(), _step_times_ms.avg(),
4031                          _step_times_ms.sd());
4032   gclog_or_tty->print_cr("                    max = %1.2lfms, total = %1.2lfms",
4033                          _step_times_ms.maximum(), _step_times_ms.sum());
4034 
4035 #if _MARKING_STATS_
4036   gclog_or_tty->print_cr("  Clock Intervals (cum): num = %d, avg = %1.2lfms, sd = %1.2lfms",
4037                          _all_clock_intervals_ms.num(), _all_clock_intervals_ms.avg(),
4038                          _all_clock_intervals_ms.sd());
4039   gclog_or_tty->print_cr("                         max = %1.2lfms, total = %1.2lfms",
4040                          _all_clock_intervals_ms.maximum(),
4041                          _all_clock_intervals_ms.sum());
4042   gclog_or_tty->print_cr("  Clock Causes (cum): scanning = %d, marking = %d",
4043                          _clock_due_to_scanning, _clock_due_to_marking);
4044   gclog_or_tty->print_cr("  Objects: scanned = %d, found on the bitmap = %d",
4045                          _objs_scanned, _objs_found_on_bitmap);
4046   gclog_or_tty->print_cr("  Local Queue:  pushes = %d, pops = %d, max size = %d",
4047                          _local_pushes, _local_pops, _local_max_size);
4048   gclog_or_tty->print_cr("  Global Stack: pushes = %d, pops = %d, max size = %d",
4049                          _global_pushes, _global_pops, _global_max_size);
4050   gclog_or_tty->print_cr("                transfers to = %d, transfers from = %d",
4051                          _global_transfers_to,_global_transfers_from);
4052   gclog_or_tty->print_cr("  Regions: claimed = %d, Region Stack: pops = %d",
4053                          _regions_claimed, _region_stack_pops);
4054   gclog_or_tty->print_cr("  SATB buffers: processed = %d", _satb_buffers_processed);
4055   gclog_or_tty->print_cr("  Steals: attempts = %d, successes = %d",
4056                          _steal_attempts, _steals);
4057   gclog_or_tty->print_cr("  Aborted: %d, due to", _aborted);
4058   gclog_or_tty->print_cr("    overflow: %d, global abort: %d, yield: %d",
4059                          _aborted_overflow, _aborted_cm_aborted, _aborted_yield);
4060   gclog_or_tty->print_cr("    time out: %d, SATB: %d, termination: %d",
4061                          _aborted_timed_out, _aborted_satb, _aborted_termination);
4062 #endif // _MARKING_STATS_
4063 }
4064 
4065 /*****************************************************************************
4066 
4067     The do_marking_step(time_target_ms) method is the building block
4068     of the parallel marking framework. It can be called in parallel
4069     with other invocations of do_marking_step() on different tasks
4070     (but only one per task, obviously) and concurrently with the
4071     mutator threads, or during remark, hence it eliminates the need
4072     for two versions of the code. When called during remark, it will
4073     pick up from where the task left off during the concurrent marking
4074     phase. Interestingly, tasks are also claimable during evacuation
4075     pauses too, since do_marking_step() ensures that it aborts before
4076     it needs to yield.
4077 
4078     The data structures that is uses to do marking work are the
4079     following:
4080 
4081       (1) Marking Bitmap. If there are gray objects that appear only
4082       on the bitmap (this happens either when dealing with an overflow
4083       or when the initial marking phase has simply marked the roots
4084       and didn't push them on the stack), then tasks claim heap
4085       regions whose bitmap they then scan to find gray objects. A
4086       global finger indicates where the end of the last claimed region
4087       is. A local finger indicates how far into the region a task has
4088       scanned. The two fingers are used to determine how to gray an
4089       object (i.e. whether simply marking it is OK, as it will be
4090       visited by a task in the future, or whether it needs to be also
4091       pushed on a stack).
4092 
4093       (2) Local Queue. The local queue of the task which is accessed
4094       reasonably efficiently by the task. Other tasks can steal from
4095       it when they run out of work. Throughout the marking phase, a
4096       task attempts to keep its local queue short but not totally
4097       empty, so that entries are available for stealing by other
4098       tasks. Only when there is no more work, a task will totally
4099       drain its local queue.
4100 
4101       (3) Global Mark Stack. This handles local queue overflow. During
4102       marking only sets of entries are moved between it and the local
4103       queues, as access to it requires a mutex and more fine-grain
4104       interaction with it which might cause contention. If it
4105       overflows, then the marking phase should restart and iterate
4106       over the bitmap to identify gray objects. Throughout the marking
4107       phase, tasks attempt to keep the global mark stack at a small
4108       length but not totally empty, so that entries are available for
4109       popping by other tasks. Only when there is no more work, tasks
4110       will totally drain the global mark stack.
4111 
4112       (4) Global Region Stack. Entries on it correspond to areas of
4113       the bitmap that need to be scanned since they contain gray
4114       objects. Pushes on the region stack only happen during
4115       evacuation pauses and typically correspond to areas covered by
4116       GC LABS. If it overflows, then the marking phase should restart
4117       and iterate over the bitmap to identify gray objects. Tasks will
4118       try to totally drain the region stack as soon as possible.
4119 
4120       (5) SATB Buffer Queue. This is where completed SATB buffers are
4121       made available. Buffers are regularly removed from this queue
4122       and scanned for roots, so that the queue doesn't get too
4123       long. During remark, all completed buffers are processed, as
4124       well as the filled in parts of any uncompleted buffers.
4125 
4126     The do_marking_step() method tries to abort when the time target
4127     has been reached. There are a few other cases when the
4128     do_marking_step() method also aborts:
4129 
4130       (1) When the marking phase has been aborted (after a Full GC).
4131 
4132       (2) When a global overflow (either on the global stack or the
4133       region stack) has been triggered. Before the task aborts, it
4134       will actually sync up with the other tasks to ensure that all
4135       the marking data structures (local queues, stacks, fingers etc.)
4136       are re-initialised so that when do_marking_step() completes,
4137       the marking phase can immediately restart.
4138 
4139       (3) When enough completed SATB buffers are available. The
4140       do_marking_step() method only tries to drain SATB buffers right
4141       at the beginning. So, if enough buffers are available, the
4142       marking step aborts and the SATB buffers are processed at
4143       the beginning of the next invocation.
4144 
4145       (4) To yield. when we have to yield then we abort and yield
4146       right at the end of do_marking_step(). This saves us from a lot
4147       of hassle as, by yielding we might allow a Full GC. If this
4148       happens then objects will be compacted underneath our feet, the
4149       heap might shrink, etc. We save checking for this by just
4150       aborting and doing the yield right at the end.
4151 
4152     From the above it follows that the do_marking_step() method should
4153     be called in a loop (or, otherwise, regularly) until it completes.
4154 
4155     If a marking step completes without its has_aborted() flag being
4156     true, it means it has completed the current marking phase (and
4157     also all other marking tasks have done so and have all synced up).
4158 
4159     A method called regular_clock_call() is invoked "regularly" (in
4160     sub ms intervals) throughout marking. It is this clock method that
4161     checks all the abort conditions which were mentioned above and
4162     decides when the task should abort. A work-based scheme is used to
4163     trigger this clock method: when the number of object words the
4164     marking phase has scanned or the number of references the marking
4165     phase has visited reach a given limit. Additional invocations to
4166     the method clock have been planted in a few other strategic places
4167     too. The initial reason for the clock method was to avoid calling
4168     vtime too regularly, as it is quite expensive. So, once it was in
4169     place, it was natural to piggy-back all the other conditions on it
4170     too and not constantly check them throughout the code.
4171 
4172  *****************************************************************************/
4173 
4174 void CMTask::do_marking_step(double time_target_ms,
4175                              bool do_stealing,
4176                              bool do_termination) {
4177   assert(time_target_ms >= 1.0, "minimum granularity is 1ms");
4178   assert(concurrent() == _cm->concurrent(), "they should be the same");
4179 
4180   assert(concurrent() || _cm->region_stack_empty(),
4181          "the region stack should have been cleared before remark");
4182   assert(concurrent() || !_cm->has_aborted_regions(),
4183          "aborted regions should have been cleared before remark");
4184   assert(_region_finger == NULL,
4185          "this should be non-null only when a region is being scanned");
4186 
4187   G1CollectorPolicy* g1_policy = _g1h->g1_policy();
4188   assert(_task_queues != NULL, "invariant");
4189   assert(_task_queue != NULL, "invariant");
4190   assert(_task_queues->queue(_task_id) == _task_queue, "invariant");
4191 
4192   assert(!_claimed,
4193          "only one thread should claim this task at any one time");
4194 
4195   // OK, this doesn't safeguard again all possible scenarios, as it is
4196   // possible for two threads to set the _claimed flag at the same
4197   // time. But it is only for debugging purposes anyway and it will
4198   // catch most problems.
4199   _claimed = true;
4200 
4201   _start_time_ms = os::elapsedVTime() * 1000.0;
4202   statsOnly( _interval_start_time_ms = _start_time_ms );
4203 
4204   double diff_prediction_ms =
4205     g1_policy->get_new_prediction(&_marking_step_diffs_ms);
4206   _time_target_ms = time_target_ms - diff_prediction_ms;
4207 
4208   // set up the variables that are used in the work-based scheme to
4209   // call the regular clock method
4210   _words_scanned = 0;
4211   _refs_reached  = 0;
4212   recalculate_limits();
4213 
4214   // clear all flags
4215   clear_has_aborted();
4216   _has_timed_out = false;
4217   _draining_satb_buffers = false;
4218 
4219   ++_calls;
4220 
4221   if (_cm->verbose_low()) {
4222     gclog_or_tty->print_cr("[%d] >>>>>>>>>> START, call = %d, "
4223                            "target = %1.2lfms >>>>>>>>>>",
4224                            _task_id, _calls, _time_target_ms);
4225   }
4226 
4227   // Set up the bitmap and oop closures. Anything that uses them is
4228   // eventually called from this method, so it is OK to allocate these
4229   // statically.
4230   CMBitMapClosure bitmap_closure(this, _cm, _nextMarkBitMap);
4231   G1CMOopClosure  cm_oop_closure(_g1h, _cm, this);
4232   set_cm_oop_closure(&cm_oop_closure);
4233 
4234   if (_cm->has_overflown()) {
4235     // This can happen if the region stack or the mark stack overflows
4236     // during a GC pause and this task, after a yield point,
4237     // restarts. We have to abort as we need to get into the overflow
4238     // protocol which happens right at the end of this task.
4239     set_has_aborted();
4240   }
4241 
4242   // First drain any available SATB buffers. After this, we will not
4243   // look at SATB buffers before the next invocation of this method.
4244   // If enough completed SATB buffers are queued up, the regular clock
4245   // will abort this task so that it restarts.
4246   drain_satb_buffers();
4247   // ...then partially drain the local queue and the global stack
4248   drain_local_queue(true);
4249   drain_global_stack(true);
4250 
4251   // Then totally drain the region stack.  We will not look at
4252   // it again before the next invocation of this method. Entries on
4253   // the region stack are only added during evacuation pauses, for
4254   // which we have to yield. When we do, we abort the task anyway so
4255   // it will look at the region stack again when it restarts.
4256   bitmap_closure.set_scanning_heap_region(false);
4257   drain_region_stack(&bitmap_closure);
4258   // ...then partially drain the local queue and the global stack
4259   drain_local_queue(true);
4260   drain_global_stack(true);
4261 
4262   do {
4263     if (!has_aborted() && _curr_region != NULL) {
4264       // This means that we're already holding on to a region.
4265       assert(_finger != NULL, "if region is not NULL, then the finger "
4266              "should not be NULL either");
4267 
4268       // We might have restarted this task after an evacuation pause
4269       // which might have evacuated the region we're holding on to
4270       // underneath our feet. Let's read its limit again to make sure
4271       // that we do not iterate over a region of the heap that
4272       // contains garbage (update_region_limit() will also move
4273       // _finger to the start of the region if it is found empty).
4274       update_region_limit();
4275       // We will start from _finger not from the start of the region,
4276       // as we might be restarting this task after aborting half-way
4277       // through scanning this region. In this case, _finger points to
4278       // the address where we last found a marked object. If this is a
4279       // fresh region, _finger points to start().
4280       MemRegion mr = MemRegion(_finger, _region_limit);
4281 
4282       if (_cm->verbose_low()) {
4283         gclog_or_tty->print_cr("[%d] we're scanning part "
4284                                "["PTR_FORMAT", "PTR_FORMAT") "
4285                                "of region "PTR_FORMAT,
4286                                _task_id, _finger, _region_limit, _curr_region);
4287       }
4288 
4289       // Let's iterate over the bitmap of the part of the
4290       // region that is left.
4291       bitmap_closure.set_scanning_heap_region(true);
4292       if (mr.is_empty() ||
4293           _nextMarkBitMap->iterate(&bitmap_closure, mr)) {
4294         // We successfully completed iterating over the region. Now,
4295         // let's give up the region.
4296         giveup_current_region();
4297         regular_clock_call();
4298       } else {
4299         assert(has_aborted(), "currently the only way to do so");
4300         // The only way to abort the bitmap iteration is to return
4301         // false from the do_bit() method. However, inside the
4302         // do_bit() method we move the _finger to point to the
4303         // object currently being looked at. So, if we bail out, we
4304         // have definitely set _finger to something non-null.
4305         assert(_finger != NULL, "invariant");
4306 
4307         // Region iteration was actually aborted. So now _finger
4308         // points to the address of the object we last scanned. If we
4309         // leave it there, when we restart this task, we will rescan
4310         // the object. It is easy to avoid this. We move the finger by
4311         // enough to point to the next possible object header (the
4312         // bitmap knows by how much we need to move it as it knows its
4313         // granularity).
4314         assert(_finger < _region_limit, "invariant");
4315         HeapWord* new_finger = _nextMarkBitMap->nextWord(_finger);
4316         // Check if bitmap iteration was aborted while scanning the last object
4317         if (new_finger >= _region_limit) {
4318             giveup_current_region();
4319         } else {
4320             move_finger_to(new_finger);
4321         }
4322       }
4323     }
4324     // At this point we have either completed iterating over the
4325     // region we were holding on to, or we have aborted.
4326 
4327     // We then partially drain the local queue and the global stack.
4328     // (Do we really need this?)
4329     drain_local_queue(true);
4330     drain_global_stack(true);
4331 
4332     // Read the note on the claim_region() method on why it might
4333     // return NULL with potentially more regions available for
4334     // claiming and why we have to check out_of_regions() to determine
4335     // whether we're done or not.
4336     while (!has_aborted() && _curr_region == NULL && !_cm->out_of_regions()) {
4337       // We are going to try to claim a new region. We should have
4338       // given up on the previous one.
4339       // Separated the asserts so that we know which one fires.
4340       assert(_curr_region  == NULL, "invariant");
4341       assert(_finger       == NULL, "invariant");
4342       assert(_region_limit == NULL, "invariant");
4343       if (_cm->verbose_low()) {
4344         gclog_or_tty->print_cr("[%d] trying to claim a new region", _task_id);
4345       }
4346       HeapRegion* claimed_region = _cm->claim_region(_task_id);
4347       if (claimed_region != NULL) {
4348         // Yes, we managed to claim one
4349         statsOnly( ++_regions_claimed );
4350 
4351         if (_cm->verbose_low()) {
4352           gclog_or_tty->print_cr("[%d] we successfully claimed "
4353                                  "region "PTR_FORMAT,
4354                                  _task_id, claimed_region);
4355         }
4356 
4357         setup_for_region(claimed_region);
4358         assert(_curr_region == claimed_region, "invariant");
4359       }
4360       // It is important to call the regular clock here. It might take
4361       // a while to claim a region if, for example, we hit a large
4362       // block of empty regions. So we need to call the regular clock
4363       // method once round the loop to make sure it's called
4364       // frequently enough.
4365       regular_clock_call();
4366     }
4367 
4368     if (!has_aborted() && _curr_region == NULL) {
4369       assert(_cm->out_of_regions(),
4370              "at this point we should be out of regions");
4371     }
4372   } while ( _curr_region != NULL && !has_aborted());
4373 
4374   if (!has_aborted()) {
4375     // We cannot check whether the global stack is empty, since other
4376     // tasks might be pushing objects to it concurrently. We also cannot
4377     // check if the region stack is empty because if a thread is aborting
4378     // it can push a partially done region back.
4379     assert(_cm->out_of_regions(),
4380            "at this point we should be out of regions");
4381 
4382     if (_cm->verbose_low()) {
4383       gclog_or_tty->print_cr("[%d] all regions claimed", _task_id);
4384     }
4385 
4386     // Try to reduce the number of available SATB buffers so that
4387     // remark has less work to do.
4388     drain_satb_buffers();
4389   }
4390 
4391   // Since we've done everything else, we can now totally drain the
4392   // local queue and global stack.
4393   drain_local_queue(false);
4394   drain_global_stack(false);
4395 
4396   // Attempt at work stealing from other task's queues.
4397   if (do_stealing && !has_aborted()) {
4398     // We have not aborted. This means that we have finished all that
4399     // we could. Let's try to do some stealing...
4400 
4401     // We cannot check whether the global stack is empty, since other
4402     // tasks might be pushing objects to it concurrently. We also cannot
4403     // check if the region stack is empty because if a thread is aborting
4404     // it can push a partially done region back.
4405     assert(_cm->out_of_regions() && _task_queue->size() == 0,
4406            "only way to reach here");
4407 
4408     if (_cm->verbose_low()) {
4409       gclog_or_tty->print_cr("[%d] starting to steal", _task_id);
4410     }
4411 
4412     while (!has_aborted()) {
4413       oop obj;
4414       statsOnly( ++_steal_attempts );
4415 
4416       if (_cm->try_stealing(_task_id, &_hash_seed, obj)) {
4417         if (_cm->verbose_medium()) {
4418           gclog_or_tty->print_cr("[%d] stolen "PTR_FORMAT" successfully",
4419                                  _task_id, (void*) obj);
4420         }
4421 
4422         statsOnly( ++_steals );
4423 
4424         assert(_nextMarkBitMap->isMarked((HeapWord*) obj),
4425                "any stolen object should be marked");
4426         scan_object(obj);
4427 
4428         // And since we're towards the end, let's totally drain the
4429         // local queue and global stack.
4430         drain_local_queue(false);
4431         drain_global_stack(false);
4432       } else {
4433         break;
4434       }
4435     }
4436   }
4437 
4438   // If we are about to wrap up and go into termination, check if we
4439   // should raise the overflow flag.
4440   if (do_termination && !has_aborted()) {
4441     if (_cm->force_overflow()->should_force()) {
4442       _cm->set_has_overflown();
4443       regular_clock_call();
4444     }
4445   }
4446 
4447   // We still haven't aborted. Now, let's try to get into the
4448   // termination protocol.
4449   if (do_termination && !has_aborted()) {
4450     // We cannot check whether the global stack is empty, since other
4451     // tasks might be concurrently pushing objects on it. We also cannot
4452     // check if the region stack is empty because if a thread is aborting
4453     // it can push a partially done region back.
4454     // Separated the asserts so that we know which one fires.
4455     assert(_cm->out_of_regions(), "only way to reach here");
4456     assert(_task_queue->size() == 0, "only way to reach here");
4457 
4458     if (_cm->verbose_low()) {
4459       gclog_or_tty->print_cr("[%d] starting termination protocol", _task_id);
4460     }
4461 
4462     _termination_start_time_ms = os::elapsedVTime() * 1000.0;
4463     // The CMTask class also extends the TerminatorTerminator class,
4464     // hence its should_exit_termination() method will also decide
4465     // whether to exit the termination protocol or not.
4466     bool finished = _cm->terminator()->offer_termination(this);
4467     double termination_end_time_ms = os::elapsedVTime() * 1000.0;
4468     _termination_time_ms +=
4469       termination_end_time_ms - _termination_start_time_ms;
4470 
4471     if (finished) {
4472       // We're all done.
4473 
4474       if (_task_id == 0) {
4475         // let's allow task 0 to do this
4476         if (concurrent()) {
4477           assert(_cm->concurrent_marking_in_progress(), "invariant");
4478           // we need to set this to false before the next
4479           // safepoint. This way we ensure that the marking phase
4480           // doesn't observe any more heap expansions.
4481           _cm->clear_concurrent_marking_in_progress();
4482         }
4483       }
4484 
4485       // We can now guarantee that the global stack is empty, since
4486       // all other tasks have finished. We separated the guarantees so
4487       // that, if a condition is false, we can immediately find out
4488       // which one.
4489       guarantee(_cm->out_of_regions(), "only way to reach here");
4490       guarantee(_aborted_region.is_empty(), "only way to reach here");
4491       guarantee(_cm->region_stack_empty(), "only way to reach here");
4492       guarantee(_cm->mark_stack_empty(), "only way to reach here");
4493       guarantee(_task_queue->size() == 0, "only way to reach here");
4494       guarantee(!_cm->has_overflown(), "only way to reach here");
4495       guarantee(!_cm->mark_stack_overflow(), "only way to reach here");
4496       guarantee(!_cm->region_stack_overflow(), "only way to reach here");
4497 
4498       if (_cm->verbose_low()) {
4499         gclog_or_tty->print_cr("[%d] all tasks terminated", _task_id);
4500       }
4501     } else {
4502       // Apparently there's more work to do. Let's abort this task. It
4503       // will restart it and we can hopefully find more things to do.
4504 
4505       if (_cm->verbose_low()) {
4506         gclog_or_tty->print_cr("[%d] apparently there is more work to do",
4507                                _task_id);
4508       }
4509 
4510       set_has_aborted();
4511       statsOnly( ++_aborted_termination );
4512     }
4513   }
4514 
4515   // Mainly for debugging purposes to make sure that a pointer to the
4516   // closure which was statically allocated in this frame doesn't
4517   // escape it by accident.
4518   set_cm_oop_closure(NULL);
4519   double end_time_ms = os::elapsedVTime() * 1000.0;
4520   double elapsed_time_ms = end_time_ms - _start_time_ms;
4521   // Update the step history.
4522   _step_times_ms.add(elapsed_time_ms);
4523 
4524   if (has_aborted()) {
4525     // The task was aborted for some reason.
4526 
4527     statsOnly( ++_aborted );
4528 
4529     if (_has_timed_out) {
4530       double diff_ms = elapsed_time_ms - _time_target_ms;
4531       // Keep statistics of how well we did with respect to hitting
4532       // our target only if we actually timed out (if we aborted for
4533       // other reasons, then the results might get skewed).
4534       _marking_step_diffs_ms.add(diff_ms);
4535     }
4536 
4537     if (_cm->has_overflown()) {
4538       // This is the interesting one. We aborted because a global
4539       // overflow was raised. This means we have to restart the
4540       // marking phase and start iterating over regions. However, in
4541       // order to do this we have to make sure that all tasks stop
4542       // what they are doing and re-initialise in a safe manner. We
4543       // will achieve this with the use of two barrier sync points.
4544 
4545       if (_cm->verbose_low()) {
4546         gclog_or_tty->print_cr("[%d] detected overflow", _task_id);
4547       }
4548 
4549       _cm->enter_first_sync_barrier(_task_id);
4550       // When we exit this sync barrier we know that all tasks have
4551       // stopped doing marking work. So, it's now safe to
4552       // re-initialise our data structures. At the end of this method,
4553       // task 0 will clear the global data structures.
4554 
4555       statsOnly( ++_aborted_overflow );
4556 
4557       // We clear the local state of this task...
4558       clear_region_fields();
4559 
4560       // ...and enter the second barrier.
4561       _cm->enter_second_sync_barrier(_task_id);
4562       // At this point everything has bee re-initialised and we're
4563       // ready to restart.
4564     }
4565 
4566     if (_cm->verbose_low()) {
4567       gclog_or_tty->print_cr("[%d] <<<<<<<<<< ABORTING, target = %1.2lfms, "
4568                              "elapsed = %1.2lfms <<<<<<<<<<",
4569                              _task_id, _time_target_ms, elapsed_time_ms);
4570       if (_cm->has_aborted()) {
4571         gclog_or_tty->print_cr("[%d] ========== MARKING ABORTED ==========",
4572                                _task_id);
4573       }
4574     }
4575   } else {
4576     if (_cm->verbose_low()) {
4577       gclog_or_tty->print_cr("[%d] <<<<<<<<<< FINISHED, target = %1.2lfms, "
4578                              "elapsed = %1.2lfms <<<<<<<<<<",
4579                              _task_id, _time_target_ms, elapsed_time_ms);
4580     }
4581   }
4582 
4583   _claimed = false;
4584 }
4585 
4586 CMTask::CMTask(int task_id,
4587                ConcurrentMark* cm,
4588                CMTaskQueue* task_queue,
4589                CMTaskQueueSet* task_queues)
4590   : _g1h(G1CollectedHeap::heap()),
4591     _task_id(task_id), _cm(cm),
4592     _claimed(false),
4593     _nextMarkBitMap(NULL), _hash_seed(17),
4594     _task_queue(task_queue),
4595     _task_queues(task_queues),
4596     _cm_oop_closure(NULL),
4597     _aborted_region(MemRegion()) {
4598   guarantee(task_queue != NULL, "invariant");
4599   guarantee(task_queues != NULL, "invariant");
4600 
4601   statsOnly( _clock_due_to_scanning = 0;
4602              _clock_due_to_marking  = 0 );
4603 
4604   _marking_step_diffs_ms.add(0.5);
4605 }
4606 
4607 // These are formatting macros that are used below to ensure
4608 // consistent formatting. The *_H_* versions are used to format the
4609 // header for a particular value and they should be kept consistent
4610 // with the corresponding macro. Also note that most of the macros add
4611 // the necessary white space (as a prefix) which makes them a bit
4612 // easier to compose.
4613 
4614 // All the output lines are prefixed with this string to be able to
4615 // identify them easily in a large log file.
4616 #define G1PPRL_LINE_PREFIX            "###"
4617 
4618 #define G1PPRL_ADDR_BASE_FORMAT    " "PTR_FORMAT"-"PTR_FORMAT
4619 #ifdef _LP64
4620 #define G1PPRL_ADDR_BASE_H_FORMAT  " %37s"
4621 #else // _LP64
4622 #define G1PPRL_ADDR_BASE_H_FORMAT  " %21s"
4623 #endif // _LP64
4624 
4625 // For per-region info
4626 #define G1PPRL_TYPE_FORMAT            "   %-4s"
4627 #define G1PPRL_TYPE_H_FORMAT          "   %4s"
4628 #define G1PPRL_BYTE_FORMAT            "  "SIZE_FORMAT_W(9)
4629 #define G1PPRL_BYTE_H_FORMAT          "  %9s"
4630 #define G1PPRL_DOUBLE_FORMAT          "  %14.1f"
4631 #define G1PPRL_DOUBLE_H_FORMAT        "  %14s"
4632 
4633 // For summary info
4634 #define G1PPRL_SUM_ADDR_FORMAT(tag)    "  "tag":"G1PPRL_ADDR_BASE_FORMAT
4635 #define G1PPRL_SUM_BYTE_FORMAT(tag)    "  "tag": "SIZE_FORMAT
4636 #define G1PPRL_SUM_MB_FORMAT(tag)      "  "tag": %1.2f MB"
4637 #define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag)" / %1.2f %%"
4638 
4639 G1PrintRegionLivenessInfoClosure::
4640 G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name)
4641   : _out(out),
4642     _total_used_bytes(0), _total_capacity_bytes(0),
4643     _total_prev_live_bytes(0), _total_next_live_bytes(0),
4644     _hum_used_bytes(0), _hum_capacity_bytes(0),
4645     _hum_prev_live_bytes(0), _hum_next_live_bytes(0) {
4646   G1CollectedHeap* g1h = G1CollectedHeap::heap();
4647   MemRegion g1_committed = g1h->g1_committed();
4648   MemRegion g1_reserved = g1h->g1_reserved();
4649   double now = os::elapsedTime();
4650 
4651   // Print the header of the output.
4652   _out->cr();
4653   _out->print_cr(G1PPRL_LINE_PREFIX" PHASE %s @ %1.3f", phase_name, now);
4654   _out->print_cr(G1PPRL_LINE_PREFIX" HEAP"
4655                  G1PPRL_SUM_ADDR_FORMAT("committed")
4656                  G1PPRL_SUM_ADDR_FORMAT("reserved")
4657                  G1PPRL_SUM_BYTE_FORMAT("region-size"),
4658                  g1_committed.start(), g1_committed.end(),
4659                  g1_reserved.start(), g1_reserved.end(),
4660                  HeapRegion::GrainBytes);
4661   _out->print_cr(G1PPRL_LINE_PREFIX);
4662   _out->print_cr(G1PPRL_LINE_PREFIX
4663                  G1PPRL_TYPE_H_FORMAT
4664                  G1PPRL_ADDR_BASE_H_FORMAT
4665                  G1PPRL_BYTE_H_FORMAT
4666                  G1PPRL_BYTE_H_FORMAT
4667                  G1PPRL_BYTE_H_FORMAT
4668                  G1PPRL_DOUBLE_H_FORMAT,
4669                  "type", "address-range",
4670                  "used", "prev-live", "next-live", "gc-eff");
4671   _out->print_cr(G1PPRL_LINE_PREFIX
4672                  G1PPRL_TYPE_H_FORMAT
4673                  G1PPRL_ADDR_BASE_H_FORMAT
4674                  G1PPRL_BYTE_H_FORMAT
4675                  G1PPRL_BYTE_H_FORMAT
4676                  G1PPRL_BYTE_H_FORMAT
4677                  G1PPRL_DOUBLE_H_FORMAT,
4678                  "", "",
4679                  "(bytes)", "(bytes)", "(bytes)", "(bytes/ms)");
4680 }
4681 
4682 // It takes as a parameter a reference to one of the _hum_* fields, it
4683 // deduces the corresponding value for a region in a humongous region
4684 // series (either the region size, or what's left if the _hum_* field
4685 // is < the region size), and updates the _hum_* field accordingly.
4686 size_t G1PrintRegionLivenessInfoClosure::get_hum_bytes(size_t* hum_bytes) {
4687   size_t bytes = 0;
4688   // The > 0 check is to deal with the prev and next live bytes which
4689   // could be 0.
4690   if (*hum_bytes > 0) {
4691     bytes = MIN2(HeapRegion::GrainBytes, *hum_bytes);
4692     *hum_bytes -= bytes;
4693   }
4694   return bytes;
4695 }
4696 
4697 // It deduces the values for a region in a humongous region series
4698 // from the _hum_* fields and updates those accordingly. It assumes
4699 // that that _hum_* fields have already been set up from the "starts
4700 // humongous" region and we visit the regions in address order.
4701 void G1PrintRegionLivenessInfoClosure::get_hum_bytes(size_t* used_bytes,
4702                                                      size_t* capacity_bytes,
4703                                                      size_t* prev_live_bytes,
4704                                                      size_t* next_live_bytes) {
4705   assert(_hum_used_bytes > 0 && _hum_capacity_bytes > 0, "pre-condition");
4706   *used_bytes      = get_hum_bytes(&_hum_used_bytes);
4707   *capacity_bytes  = get_hum_bytes(&_hum_capacity_bytes);
4708   *prev_live_bytes = get_hum_bytes(&_hum_prev_live_bytes);
4709   *next_live_bytes = get_hum_bytes(&_hum_next_live_bytes);
4710 }
4711 
4712 bool G1PrintRegionLivenessInfoClosure::doHeapRegion(HeapRegion* r) {
4713   const char* type = "";
4714   HeapWord* bottom       = r->bottom();
4715   HeapWord* end          = r->end();
4716   size_t capacity_bytes  = r->capacity();
4717   size_t used_bytes      = r->used();
4718   size_t prev_live_bytes = r->live_bytes();
4719   size_t next_live_bytes = r->next_live_bytes();
4720   double gc_eff          = r->gc_efficiency();
4721   if (r->used() == 0) {
4722     type = "FREE";
4723   } else if (r->is_survivor()) {
4724     type = "SURV";
4725   } else if (r->is_young()) {
4726     type = "EDEN";
4727   } else if (r->startsHumongous()) {
4728     type = "HUMS";
4729 
4730     assert(_hum_used_bytes == 0 && _hum_capacity_bytes == 0 &&
4731            _hum_prev_live_bytes == 0 && _hum_next_live_bytes == 0,
4732            "they should have been zeroed after the last time we used them");
4733     // Set up the _hum_* fields.
4734     _hum_capacity_bytes  = capacity_bytes;
4735     _hum_used_bytes      = used_bytes;
4736     _hum_prev_live_bytes = prev_live_bytes;
4737     _hum_next_live_bytes = next_live_bytes;
4738     get_hum_bytes(&used_bytes, &capacity_bytes,
4739                   &prev_live_bytes, &next_live_bytes);
4740     end = bottom + HeapRegion::GrainWords;
4741   } else if (r->continuesHumongous()) {
4742     type = "HUMC";
4743     get_hum_bytes(&used_bytes, &capacity_bytes,
4744                   &prev_live_bytes, &next_live_bytes);
4745     assert(end == bottom + HeapRegion::GrainWords, "invariant");
4746   } else {
4747     type = "OLD";
4748   }
4749 
4750   _total_used_bytes      += used_bytes;
4751   _total_capacity_bytes  += capacity_bytes;
4752   _total_prev_live_bytes += prev_live_bytes;
4753   _total_next_live_bytes += next_live_bytes;
4754 
4755   // Print a line for this particular region.
4756   _out->print_cr(G1PPRL_LINE_PREFIX
4757                  G1PPRL_TYPE_FORMAT
4758                  G1PPRL_ADDR_BASE_FORMAT
4759                  G1PPRL_BYTE_FORMAT
4760                  G1PPRL_BYTE_FORMAT
4761                  G1PPRL_BYTE_FORMAT
4762                  G1PPRL_DOUBLE_FORMAT,
4763                  type, bottom, end,
4764                  used_bytes, prev_live_bytes, next_live_bytes, gc_eff);
4765 
4766   return false;
4767 }
4768 
4769 G1PrintRegionLivenessInfoClosure::~G1PrintRegionLivenessInfoClosure() {
4770   // Print the footer of the output.
4771   _out->print_cr(G1PPRL_LINE_PREFIX);
4772   _out->print_cr(G1PPRL_LINE_PREFIX
4773                  " SUMMARY"
4774                  G1PPRL_SUM_MB_FORMAT("capacity")
4775                  G1PPRL_SUM_MB_PERC_FORMAT("used")
4776                  G1PPRL_SUM_MB_PERC_FORMAT("prev-live")
4777                  G1PPRL_SUM_MB_PERC_FORMAT("next-live"),
4778                  bytes_to_mb(_total_capacity_bytes),
4779                  bytes_to_mb(_total_used_bytes),
4780                  perc(_total_used_bytes, _total_capacity_bytes),
4781                  bytes_to_mb(_total_prev_live_bytes),
4782                  perc(_total_prev_live_bytes, _total_capacity_bytes),
4783                  bytes_to_mb(_total_next_live_bytes),
4784                  perc(_total_next_live_bytes, _total_capacity_bytes));
4785   _out->cr();
4786 }
--- EOF ---