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

Thu, 07 Apr 2011 09:53:20 -0700

author
johnc
date
Thu, 07 Apr 2011 09:53:20 -0700
changeset 2781
e1162778c1c8
parent 2718
8f1042ff784d
child 2848
cd8e33b2a8ad
permissions
-rw-r--r--

7009266: G1: assert(obj->is_oop_or_null(true )) failed: Error
Summary: A referent object that is only weakly reachable at the start of concurrent marking but is re-attached to the strongly reachable object graph during marking may not be marked as live. This can cause the reference object to be processed prematurely and leave dangling pointers to the referent object. Implement a read barrier for the java.lang.ref.Reference::referent field by intrinsifying the Reference.get() method, and intercepting accesses though JNI, reflection, and Unsafe, so that when a non-null referent object is read it is also logged in an SATB buffer.
Reviewed-by: kvn, iveresov, never, tonyp, dholmes

     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  */
    25 #include "precompiled.hpp"
    26 #include "classfile/symbolTable.hpp"
    27 #include "gc_implementation/g1/concurrentMark.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/g1RemSet.hpp"
    32 #include "gc_implementation/g1/heapRegionRemSet.hpp"
    33 #include "gc_implementation/g1/heapRegionSeq.inline.hpp"
    34 #include "gc_implementation/shared/vmGCOperations.hpp"
    35 #include "memory/genOopClosures.inline.hpp"
    36 #include "memory/referencePolicy.hpp"
    37 #include "memory/resourceArea.hpp"
    38 #include "oops/oop.inline.hpp"
    39 #include "runtime/handles.inline.hpp"
    40 #include "runtime/java.hpp"
    42 //
    43 // CMS Bit Map Wrapper
    45 CMBitMapRO::CMBitMapRO(ReservedSpace rs, int shifter):
    46   _bm((uintptr_t*)NULL,0),
    47   _shifter(shifter) {
    48   _bmStartWord = (HeapWord*)(rs.base());
    49   _bmWordSize  = rs.size()/HeapWordSize;    // rs.size() is in bytes
    50   ReservedSpace brs(ReservedSpace::allocation_align_size_up(
    51                      (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1));
    53   guarantee(brs.is_reserved(), "couldn't allocate CMS bit map");
    54   // For now we'll just commit all of the bit map up fromt.
    55   // Later on we'll try to be more parsimonious with swap.
    56   guarantee(_virtual_space.initialize(brs, brs.size()),
    57             "couldn't reseve backing store for CMS bit map");
    58   assert(_virtual_space.committed_size() == brs.size(),
    59          "didn't reserve backing store for all of CMS bit map?");
    60   _bm.set_map((uintptr_t*)_virtual_space.low());
    61   assert(_virtual_space.committed_size() << (_shifter + LogBitsPerByte) >=
    62          _bmWordSize, "inconsistency in bit map sizing");
    63   _bm.set_size(_bmWordSize >> _shifter);
    64 }
    66 HeapWord* CMBitMapRO::getNextMarkedWordAddress(HeapWord* addr,
    67                                                HeapWord* limit) const {
    68   // First we must round addr *up* to a possible object boundary.
    69   addr = (HeapWord*)align_size_up((intptr_t)addr,
    70                                   HeapWordSize << _shifter);
    71   size_t addrOffset = heapWordToOffset(addr);
    72   if (limit == NULL) limit = _bmStartWord + _bmWordSize;
    73   size_t limitOffset = heapWordToOffset(limit);
    74   size_t nextOffset = _bm.get_next_one_offset(addrOffset, limitOffset);
    75   HeapWord* nextAddr = offsetToHeapWord(nextOffset);
    76   assert(nextAddr >= addr, "get_next_one postcondition");
    77   assert(nextAddr == limit || isMarked(nextAddr),
    78          "get_next_one postcondition");
    79   return nextAddr;
    80 }
    82 HeapWord* CMBitMapRO::getNextUnmarkedWordAddress(HeapWord* addr,
    83                                                  HeapWord* limit) const {
    84   size_t addrOffset = heapWordToOffset(addr);
    85   if (limit == NULL) limit = _bmStartWord + _bmWordSize;
    86   size_t limitOffset = heapWordToOffset(limit);
    87   size_t nextOffset = _bm.get_next_zero_offset(addrOffset, limitOffset);
    88   HeapWord* nextAddr = offsetToHeapWord(nextOffset);
    89   assert(nextAddr >= addr, "get_next_one postcondition");
    90   assert(nextAddr == limit || !isMarked(nextAddr),
    91          "get_next_one postcondition");
    92   return nextAddr;
    93 }
    95 int CMBitMapRO::heapWordDiffToOffsetDiff(size_t diff) const {
    96   assert((diff & ((1 << _shifter) - 1)) == 0, "argument check");
    97   return (int) (diff >> _shifter);
    98 }
   100 bool CMBitMapRO::iterate(BitMapClosure* cl, MemRegion mr) {
   101   HeapWord* left  = MAX2(_bmStartWord, mr.start());
   102   HeapWord* right = MIN2(_bmStartWord + _bmWordSize, mr.end());
   103   if (right > left) {
   104     // Right-open interval [leftOffset, rightOffset).
   105     return _bm.iterate(cl, heapWordToOffset(left), heapWordToOffset(right));
   106   } else {
   107     return true;
   108   }
   109 }
   111 void CMBitMapRO::mostly_disjoint_range_union(BitMap*   from_bitmap,
   112                                              size_t    from_start_index,
   113                                              HeapWord* to_start_word,
   114                                              size_t    word_num) {
   115   _bm.mostly_disjoint_range_union(from_bitmap,
   116                                   from_start_index,
   117                                   heapWordToOffset(to_start_word),
   118                                   word_num);
   119 }
   121 #ifndef PRODUCT
   122 bool CMBitMapRO::covers(ReservedSpace rs) const {
   123   // assert(_bm.map() == _virtual_space.low(), "map inconsistency");
   124   assert(((size_t)_bm.size() * (size_t)(1 << _shifter)) == _bmWordSize,
   125          "size inconsistency");
   126   return _bmStartWord == (HeapWord*)(rs.base()) &&
   127          _bmWordSize  == rs.size()>>LogHeapWordSize;
   128 }
   129 #endif
   131 void CMBitMap::clearAll() {
   132   _bm.clear();
   133   return;
   134 }
   136 void CMBitMap::markRange(MemRegion mr) {
   137   mr.intersection(MemRegion(_bmStartWord, _bmWordSize));
   138   assert(!mr.is_empty(), "unexpected empty region");
   139   assert((offsetToHeapWord(heapWordToOffset(mr.end())) ==
   140           ((HeapWord *) mr.end())),
   141          "markRange memory region end is not card aligned");
   142   // convert address range into offset range
   143   _bm.at_put_range(heapWordToOffset(mr.start()),
   144                    heapWordToOffset(mr.end()), true);
   145 }
   147 void CMBitMap::clearRange(MemRegion mr) {
   148   mr.intersection(MemRegion(_bmStartWord, _bmWordSize));
   149   assert(!mr.is_empty(), "unexpected empty region");
   150   // convert address range into offset range
   151   _bm.at_put_range(heapWordToOffset(mr.start()),
   152                    heapWordToOffset(mr.end()), false);
   153 }
   155 MemRegion CMBitMap::getAndClearMarkedRegion(HeapWord* addr,
   156                                             HeapWord* end_addr) {
   157   HeapWord* start = getNextMarkedWordAddress(addr);
   158   start = MIN2(start, end_addr);
   159   HeapWord* end   = getNextUnmarkedWordAddress(start);
   160   end = MIN2(end, end_addr);
   161   assert(start <= end, "Consistency check");
   162   MemRegion mr(start, end);
   163   if (!mr.is_empty()) {
   164     clearRange(mr);
   165   }
   166   return mr;
   167 }
   169 CMMarkStack::CMMarkStack(ConcurrentMark* cm) :
   170   _base(NULL), _cm(cm)
   171 #ifdef ASSERT
   172   , _drain_in_progress(false)
   173   , _drain_in_progress_yields(false)
   174 #endif
   175 {}
   177 void CMMarkStack::allocate(size_t size) {
   178   _base = NEW_C_HEAP_ARRAY(oop, size);
   179   if (_base == NULL)
   180     vm_exit_during_initialization("Failed to allocate "
   181                                   "CM region mark stack");
   182   _index = 0;
   183   // QQQQ cast ...
   184   _capacity = (jint) size;
   185   _oops_do_bound = -1;
   186   NOT_PRODUCT(_max_depth = 0);
   187 }
   189 CMMarkStack::~CMMarkStack() {
   190   if (_base != NULL) FREE_C_HEAP_ARRAY(oop, _base);
   191 }
   193 void CMMarkStack::par_push(oop ptr) {
   194   while (true) {
   195     if (isFull()) {
   196       _overflow = true;
   197       return;
   198     }
   199     // Otherwise...
   200     jint index = _index;
   201     jint next_index = index+1;
   202     jint res = Atomic::cmpxchg(next_index, &_index, index);
   203     if (res == index) {
   204       _base[index] = ptr;
   205       // Note that we don't maintain this atomically.  We could, but it
   206       // doesn't seem necessary.
   207       NOT_PRODUCT(_max_depth = MAX2(_max_depth, next_index));
   208       return;
   209     }
   210     // Otherwise, we need to try again.
   211   }
   212 }
   214 void CMMarkStack::par_adjoin_arr(oop* ptr_arr, int n) {
   215   while (true) {
   216     if (isFull()) {
   217       _overflow = true;
   218       return;
   219     }
   220     // Otherwise...
   221     jint index = _index;
   222     jint next_index = index + n;
   223     if (next_index > _capacity) {
   224       _overflow = true;
   225       return;
   226     }
   227     jint res = Atomic::cmpxchg(next_index, &_index, index);
   228     if (res == index) {
   229       for (int i = 0; i < n; i++) {
   230         int ind = index + i;
   231         assert(ind < _capacity, "By overflow test above.");
   232         _base[ind] = ptr_arr[i];
   233       }
   234       NOT_PRODUCT(_max_depth = MAX2(_max_depth, next_index));
   235       return;
   236     }
   237     // Otherwise, we need to try again.
   238   }
   239 }
   242 void CMMarkStack::par_push_arr(oop* ptr_arr, int n) {
   243   MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
   244   jint start = _index;
   245   jint next_index = start + n;
   246   if (next_index > _capacity) {
   247     _overflow = true;
   248     return;
   249   }
   250   // Otherwise.
   251   _index = next_index;
   252   for (int i = 0; i < n; i++) {
   253     int ind = start + i;
   254     assert(ind < _capacity, "By overflow test above.");
   255     _base[ind] = ptr_arr[i];
   256   }
   257 }
   260 bool CMMarkStack::par_pop_arr(oop* ptr_arr, int max, int* n) {
   261   MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
   262   jint index = _index;
   263   if (index == 0) {
   264     *n = 0;
   265     return false;
   266   } else {
   267     int k = MIN2(max, index);
   268     jint new_ind = index - k;
   269     for (int j = 0; j < k; j++) {
   270       ptr_arr[j] = _base[new_ind + j];
   271     }
   272     _index = new_ind;
   273     *n = k;
   274     return true;
   275   }
   276 }
   279 CMRegionStack::CMRegionStack() : _base(NULL) {}
   281 void CMRegionStack::allocate(size_t size) {
   282   _base = NEW_C_HEAP_ARRAY(MemRegion, size);
   283   if (_base == NULL)
   284     vm_exit_during_initialization("Failed to allocate "
   285                                   "CM region mark stack");
   286   _index = 0;
   287   // QQQQ cast ...
   288   _capacity = (jint) size;
   289 }
   291 CMRegionStack::~CMRegionStack() {
   292   if (_base != NULL) FREE_C_HEAP_ARRAY(oop, _base);
   293 }
   295 void CMRegionStack::push_lock_free(MemRegion mr) {
   296   assert(mr.word_size() > 0, "Precondition");
   297   while (true) {
   298     jint index = _index;
   300     if (index >= _capacity) {
   301       _overflow = true;
   302       return;
   303     }
   304     // Otherwise...
   305     jint next_index = index+1;
   306     jint res = Atomic::cmpxchg(next_index, &_index, index);
   307     if (res == index) {
   308       _base[index] = mr;
   309       return;
   310     }
   311     // Otherwise, we need to try again.
   312   }
   313 }
   315 // Lock-free pop of the region stack. Called during the concurrent
   316 // marking / remark phases. Should only be called in tandem with
   317 // other lock-free pops.
   318 MemRegion CMRegionStack::pop_lock_free() {
   319   while (true) {
   320     jint index = _index;
   322     if (index == 0) {
   323       return MemRegion();
   324     }
   325     // Otherwise...
   326     jint next_index = index-1;
   327     jint res = Atomic::cmpxchg(next_index, &_index, index);
   328     if (res == index) {
   329       MemRegion mr = _base[next_index];
   330       if (mr.start() != NULL) {
   331         assert(mr.end() != NULL, "invariant");
   332         assert(mr.word_size() > 0, "invariant");
   333         return mr;
   334       } else {
   335         // that entry was invalidated... let's skip it
   336         assert(mr.end() == NULL, "invariant");
   337       }
   338     }
   339     // Otherwise, we need to try again.
   340   }
   341 }
   343 #if 0
   344 // The routines that manipulate the region stack with a lock are
   345 // not currently used. They should be retained, however, as a
   346 // diagnostic aid.
   348 void CMRegionStack::push_with_lock(MemRegion mr) {
   349   assert(mr.word_size() > 0, "Precondition");
   350   MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
   352   if (isFull()) {
   353     _overflow = true;
   354     return;
   355   }
   357   _base[_index] = mr;
   358   _index += 1;
   359 }
   361 MemRegion CMRegionStack::pop_with_lock() {
   362   MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
   364   while (true) {
   365     if (_index == 0) {
   366       return MemRegion();
   367     }
   368     _index -= 1;
   370     MemRegion mr = _base[_index];
   371     if (mr.start() != NULL) {
   372       assert(mr.end() != NULL, "invariant");
   373       assert(mr.word_size() > 0, "invariant");
   374       return mr;
   375     } else {
   376       // that entry was invalidated... let's skip it
   377       assert(mr.end() == NULL, "invariant");
   378     }
   379   }
   380 }
   381 #endif
   383 bool CMRegionStack::invalidate_entries_into_cset() {
   384   bool result = false;
   385   G1CollectedHeap* g1h = G1CollectedHeap::heap();
   386   for (int i = 0; i < _oops_do_bound; ++i) {
   387     MemRegion mr = _base[i];
   388     if (mr.start() != NULL) {
   389       assert(mr.end() != NULL, "invariant");
   390       assert(mr.word_size() > 0, "invariant");
   391       HeapRegion* hr = g1h->heap_region_containing(mr.start());
   392       assert(hr != NULL, "invariant");
   393       if (hr->in_collection_set()) {
   394         // The region points into the collection set
   395         _base[i] = MemRegion();
   396         result = true;
   397       }
   398     } else {
   399       // that entry was invalidated... let's skip it
   400       assert(mr.end() == NULL, "invariant");
   401     }
   402   }
   403   return result;
   404 }
   406 template<class OopClosureClass>
   407 bool CMMarkStack::drain(OopClosureClass* cl, CMBitMap* bm, bool yield_after) {
   408   assert(!_drain_in_progress || !_drain_in_progress_yields || yield_after
   409          || SafepointSynchronize::is_at_safepoint(),
   410          "Drain recursion must be yield-safe.");
   411   bool res = true;
   412   debug_only(_drain_in_progress = true);
   413   debug_only(_drain_in_progress_yields = yield_after);
   414   while (!isEmpty()) {
   415     oop newOop = pop();
   416     assert(G1CollectedHeap::heap()->is_in_reserved(newOop), "Bad pop");
   417     assert(newOop->is_oop(), "Expected an oop");
   418     assert(bm == NULL || bm->isMarked((HeapWord*)newOop),
   419            "only grey objects on this stack");
   420     // iterate over the oops in this oop, marking and pushing
   421     // the ones in CMS generation.
   422     newOop->oop_iterate(cl);
   423     if (yield_after && _cm->do_yield_check()) {
   424       res = false; break;
   425     }
   426   }
   427   debug_only(_drain_in_progress = false);
   428   return res;
   429 }
   431 void CMMarkStack::oops_do(OopClosure* f) {
   432   if (_index == 0) return;
   433   assert(_oops_do_bound != -1 && _oops_do_bound <= _index,
   434          "Bound must be set.");
   435   for (int i = 0; i < _oops_do_bound; i++) {
   436     f->do_oop(&_base[i]);
   437   }
   438   _oops_do_bound = -1;
   439 }
   441 bool ConcurrentMark::not_yet_marked(oop obj) const {
   442   return (_g1h->is_obj_ill(obj)
   443           || (_g1h->is_in_permanent(obj)
   444               && !nextMarkBitMap()->isMarked((HeapWord*)obj)));
   445 }
   447 #ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away
   448 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
   449 #endif // _MSC_VER
   451 ConcurrentMark::ConcurrentMark(ReservedSpace rs,
   452                                int max_regions) :
   453   _markBitMap1(rs, MinObjAlignment - 1),
   454   _markBitMap2(rs, MinObjAlignment - 1),
   456   _parallel_marking_threads(0),
   457   _sleep_factor(0.0),
   458   _marking_task_overhead(1.0),
   459   _cleanup_sleep_factor(0.0),
   460   _cleanup_task_overhead(1.0),
   461   _cleanup_list("Cleanup List"),
   462   _region_bm(max_regions, false /* in_resource_area*/),
   463   _card_bm((rs.size() + CardTableModRefBS::card_size - 1) >>
   464            CardTableModRefBS::card_shift,
   465            false /* in_resource_area*/),
   466   _prevMarkBitMap(&_markBitMap1),
   467   _nextMarkBitMap(&_markBitMap2),
   468   _at_least_one_mark_complete(false),
   470   _markStack(this),
   471   _regionStack(),
   472   // _finger set in set_non_marking_state
   474   _max_task_num(MAX2(ParallelGCThreads, (size_t)1)),
   475   // _active_tasks set in set_non_marking_state
   476   // _tasks set inside the constructor
   477   _task_queues(new CMTaskQueueSet((int) _max_task_num)),
   478   _terminator(ParallelTaskTerminator((int) _max_task_num, _task_queues)),
   480   _has_overflown(false),
   481   _concurrent(false),
   482   _has_aborted(false),
   483   _restart_for_overflow(false),
   484   _concurrent_marking_in_progress(false),
   485   _should_gray_objects(false),
   487   // _verbose_level set below
   489   _init_times(),
   490   _remark_times(), _remark_mark_times(), _remark_weak_ref_times(),
   491   _cleanup_times(),
   492   _total_counting_time(0.0),
   493   _total_rs_scrub_time(0.0),
   495   _parallel_workers(NULL)
   496 {
   497   CMVerboseLevel verbose_level =
   498     (CMVerboseLevel) G1MarkingVerboseLevel;
   499   if (verbose_level < no_verbose)
   500     verbose_level = no_verbose;
   501   if (verbose_level > high_verbose)
   502     verbose_level = high_verbose;
   503   _verbose_level = verbose_level;
   505   if (verbose_low())
   506     gclog_or_tty->print_cr("[global] init, heap start = "PTR_FORMAT", "
   507                            "heap end = "PTR_FORMAT, _heap_start, _heap_end);
   509   _markStack.allocate(MarkStackSize);
   510   _regionStack.allocate(G1MarkRegionStackSize);
   512   // Create & start a ConcurrentMark thread.
   513   _cmThread = new ConcurrentMarkThread(this);
   514   assert(cmThread() != NULL, "CM Thread should have been created");
   515   assert(cmThread()->cm() != NULL, "CM Thread should refer to this cm");
   517   _g1h = G1CollectedHeap::heap();
   518   assert(CGC_lock != NULL, "Where's the CGC_lock?");
   519   assert(_markBitMap1.covers(rs), "_markBitMap1 inconsistency");
   520   assert(_markBitMap2.covers(rs), "_markBitMap2 inconsistency");
   522   SATBMarkQueueSet& satb_qs = JavaThread::satb_mark_queue_set();
   523   satb_qs.set_buffer_size(G1SATBBufferSize);
   525   _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num);
   526   _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num);
   528   // so that the assertion in MarkingTaskQueue::task_queue doesn't fail
   529   _active_tasks = _max_task_num;
   530   for (int i = 0; i < (int) _max_task_num; ++i) {
   531     CMTaskQueue* task_queue = new CMTaskQueue();
   532     task_queue->initialize();
   533     _task_queues->register_queue(i, task_queue);
   535     _tasks[i] = new CMTask(i, this, task_queue, _task_queues);
   536     _accum_task_vtime[i] = 0.0;
   537   }
   539   if (ConcGCThreads > ParallelGCThreads) {
   540     vm_exit_during_initialization("Can't have more ConcGCThreads "
   541                                   "than ParallelGCThreads.");
   542   }
   543   if (ParallelGCThreads == 0) {
   544     // if we are not running with any parallel GC threads we will not
   545     // spawn any marking threads either
   546     _parallel_marking_threads =   0;
   547     _sleep_factor             = 0.0;
   548     _marking_task_overhead    = 1.0;
   549   } else {
   550     if (ConcGCThreads > 0) {
   551       // notice that ConcGCThreads overwrites G1MarkingOverheadPercent
   552       // if both are set
   554       _parallel_marking_threads = ConcGCThreads;
   555       _sleep_factor             = 0.0;
   556       _marking_task_overhead    = 1.0;
   557     } else if (G1MarkingOverheadPercent > 0) {
   558       // we will calculate the number of parallel marking threads
   559       // based on a target overhead with respect to the soft real-time
   560       // goal
   562       double marking_overhead = (double) G1MarkingOverheadPercent / 100.0;
   563       double overall_cm_overhead =
   564         (double) MaxGCPauseMillis * marking_overhead /
   565         (double) GCPauseIntervalMillis;
   566       double cpu_ratio = 1.0 / (double) os::processor_count();
   567       double marking_thread_num = ceil(overall_cm_overhead / cpu_ratio);
   568       double marking_task_overhead =
   569         overall_cm_overhead / marking_thread_num *
   570                                                 (double) os::processor_count();
   571       double sleep_factor =
   572                          (1.0 - marking_task_overhead) / marking_task_overhead;
   574       _parallel_marking_threads = (size_t) marking_thread_num;
   575       _sleep_factor             = sleep_factor;
   576       _marking_task_overhead    = marking_task_overhead;
   577     } else {
   578       _parallel_marking_threads = MAX2((ParallelGCThreads + 2) / 4, (size_t)1);
   579       _sleep_factor             = 0.0;
   580       _marking_task_overhead    = 1.0;
   581     }
   583     if (parallel_marking_threads() > 1)
   584       _cleanup_task_overhead = 1.0;
   585     else
   586       _cleanup_task_overhead = marking_task_overhead();
   587     _cleanup_sleep_factor =
   588                      (1.0 - cleanup_task_overhead()) / cleanup_task_overhead();
   590 #if 0
   591     gclog_or_tty->print_cr("Marking Threads          %d", parallel_marking_threads());
   592     gclog_or_tty->print_cr("CM Marking Task Overhead %1.4lf", marking_task_overhead());
   593     gclog_or_tty->print_cr("CM Sleep Factor          %1.4lf", sleep_factor());
   594     gclog_or_tty->print_cr("CL Marking Task Overhead %1.4lf", cleanup_task_overhead());
   595     gclog_or_tty->print_cr("CL Sleep Factor          %1.4lf", cleanup_sleep_factor());
   596 #endif
   598     guarantee(parallel_marking_threads() > 0, "peace of mind");
   599     _parallel_workers = new FlexibleWorkGang("G1 Parallel Marking Threads",
   600          (int) _parallel_marking_threads, false, true);
   601     if (_parallel_workers == NULL) {
   602       vm_exit_during_initialization("Failed necessary allocation.");
   603     } else {
   604       _parallel_workers->initialize_workers();
   605     }
   606   }
   608   // so that the call below can read a sensible value
   609   _heap_start = (HeapWord*) rs.base();
   610   set_non_marking_state();
   611 }
   613 void ConcurrentMark::update_g1_committed(bool force) {
   614   // If concurrent marking is not in progress, then we do not need to
   615   // update _heap_end. This has a subtle and important
   616   // side-effect. Imagine that two evacuation pauses happen between
   617   // marking completion and remark. The first one can grow the
   618   // heap (hence now the finger is below the heap end). Then, the
   619   // second one could unnecessarily push regions on the region
   620   // stack. This causes the invariant that the region stack is empty
   621   // at the beginning of remark to be false. By ensuring that we do
   622   // not observe heap expansions after marking is complete, then we do
   623   // not have this problem.
   624   if (!concurrent_marking_in_progress() && !force)
   625     return;
   627   MemRegion committed = _g1h->g1_committed();
   628   assert(committed.start() == _heap_start, "start shouldn't change");
   629   HeapWord* new_end = committed.end();
   630   if (new_end > _heap_end) {
   631     // The heap has been expanded.
   633     _heap_end = new_end;
   634   }
   635   // Notice that the heap can also shrink. However, this only happens
   636   // during a Full GC (at least currently) and the entire marking
   637   // phase will bail out and the task will not be restarted. So, let's
   638   // do nothing.
   639 }
   641 void ConcurrentMark::reset() {
   642   // Starting values for these two. This should be called in a STW
   643   // phase. CM will be notified of any future g1_committed expansions
   644   // will be at the end of evacuation pauses, when tasks are
   645   // inactive.
   646   MemRegion committed = _g1h->g1_committed();
   647   _heap_start = committed.start();
   648   _heap_end   = committed.end();
   650   // Separated the asserts so that we know which one fires.
   651   assert(_heap_start != NULL, "heap bounds should look ok");
   652   assert(_heap_end != NULL, "heap bounds should look ok");
   653   assert(_heap_start < _heap_end, "heap bounds should look ok");
   655   // reset all the marking data structures and any necessary flags
   656   clear_marking_state();
   658   if (verbose_low())
   659     gclog_or_tty->print_cr("[global] resetting");
   661   // We do reset all of them, since different phases will use
   662   // different number of active threads. So, it's easiest to have all
   663   // of them ready.
   664   for (int i = 0; i < (int) _max_task_num; ++i) {
   665     _tasks[i]->reset(_nextMarkBitMap);
   666   }
   668   // we need this to make sure that the flag is on during the evac
   669   // pause with initial mark piggy-backed
   670   set_concurrent_marking_in_progress();
   671 }
   673 void ConcurrentMark::set_phase(size_t active_tasks, bool concurrent) {
   674   assert(active_tasks <= _max_task_num, "we should not have more");
   676   _active_tasks = active_tasks;
   677   // Need to update the three data structures below according to the
   678   // number of active threads for this phase.
   679   _terminator   = ParallelTaskTerminator((int) active_tasks, _task_queues);
   680   _first_overflow_barrier_sync.set_n_workers((int) active_tasks);
   681   _second_overflow_barrier_sync.set_n_workers((int) active_tasks);
   683   _concurrent = concurrent;
   684   // We propagate this to all tasks, not just the active ones.
   685   for (int i = 0; i < (int) _max_task_num; ++i)
   686     _tasks[i]->set_concurrent(concurrent);
   688   if (concurrent) {
   689     set_concurrent_marking_in_progress();
   690   } else {
   691     // We currently assume that the concurrent flag has been set to
   692     // false before we start remark. At this point we should also be
   693     // in a STW phase.
   694     assert(!concurrent_marking_in_progress(), "invariant");
   695     assert(_finger == _heap_end, "only way to get here");
   696     update_g1_committed(true);
   697   }
   698 }
   700 void ConcurrentMark::set_non_marking_state() {
   701   // We set the global marking state to some default values when we're
   702   // not doing marking.
   703   clear_marking_state();
   704   _active_tasks = 0;
   705   clear_concurrent_marking_in_progress();
   706 }
   708 ConcurrentMark::~ConcurrentMark() {
   709   for (int i = 0; i < (int) _max_task_num; ++i) {
   710     delete _task_queues->queue(i);
   711     delete _tasks[i];
   712   }
   713   delete _task_queues;
   714   FREE_C_HEAP_ARRAY(CMTask*, _max_task_num);
   715 }
   717 // This closure is used to mark refs into the g1 generation
   718 // from external roots in the CMS bit map.
   719 // Called at the first checkpoint.
   720 //
   722 void ConcurrentMark::clearNextBitmap() {
   723   G1CollectedHeap* g1h = G1CollectedHeap::heap();
   724   G1CollectorPolicy* g1p = g1h->g1_policy();
   726   // Make sure that the concurrent mark thread looks to still be in
   727   // the current cycle.
   728   guarantee(cmThread()->during_cycle(), "invariant");
   730   // We are finishing up the current cycle by clearing the next
   731   // marking bitmap and getting it ready for the next cycle. During
   732   // this time no other cycle can start. So, let's make sure that this
   733   // is the case.
   734   guarantee(!g1h->mark_in_progress(), "invariant");
   736   // clear the mark bitmap (no grey objects to start with).
   737   // We need to do this in chunks and offer to yield in between
   738   // each chunk.
   739   HeapWord* start  = _nextMarkBitMap->startWord();
   740   HeapWord* end    = _nextMarkBitMap->endWord();
   741   HeapWord* cur    = start;
   742   size_t chunkSize = M;
   743   while (cur < end) {
   744     HeapWord* next = cur + chunkSize;
   745     if (next > end)
   746       next = end;
   747     MemRegion mr(cur,next);
   748     _nextMarkBitMap->clearRange(mr);
   749     cur = next;
   750     do_yield_check();
   752     // Repeat the asserts from above. We'll do them as asserts here to
   753     // minimize their overhead on the product. However, we'll have
   754     // them as guarantees at the beginning / end of the bitmap
   755     // clearing to get some checking in the product.
   756     assert(cmThread()->during_cycle(), "invariant");
   757     assert(!g1h->mark_in_progress(), "invariant");
   758   }
   760   // Repeat the asserts from above.
   761   guarantee(cmThread()->during_cycle(), "invariant");
   762   guarantee(!g1h->mark_in_progress(), "invariant");
   763 }
   765 class NoteStartOfMarkHRClosure: public HeapRegionClosure {
   766 public:
   767   bool doHeapRegion(HeapRegion* r) {
   768     if (!r->continuesHumongous()) {
   769       r->note_start_of_marking(true);
   770     }
   771     return false;
   772   }
   773 };
   775 void ConcurrentMark::checkpointRootsInitialPre() {
   776   G1CollectedHeap*   g1h = G1CollectedHeap::heap();
   777   G1CollectorPolicy* g1p = g1h->g1_policy();
   779   _has_aborted = false;
   781 #ifndef PRODUCT
   782   if (G1PrintReachableAtInitialMark) {
   783     print_reachable("at-cycle-start",
   784                     true /* use_prev_marking */, true /* all */);
   785   }
   786 #endif
   788   // Initialise marking structures. This has to be done in a STW phase.
   789   reset();
   790 }
   792 class CMMarkRootsClosure: public OopsInGenClosure {
   793 private:
   794   ConcurrentMark*  _cm;
   795   G1CollectedHeap* _g1h;
   796   bool             _do_barrier;
   798 public:
   799   CMMarkRootsClosure(ConcurrentMark* cm,
   800                      G1CollectedHeap* g1h,
   801                      bool do_barrier) : _cm(cm), _g1h(g1h),
   802                                         _do_barrier(do_barrier) { }
   804   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
   805   virtual void do_oop(      oop* p) { do_oop_work(p); }
   807   template <class T> void do_oop_work(T* p) {
   808     T heap_oop = oopDesc::load_heap_oop(p);
   809     if (!oopDesc::is_null(heap_oop)) {
   810       oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
   811       assert(obj->is_oop() || obj->mark() == NULL,
   812              "expected an oop, possibly with mark word displaced");
   813       HeapWord* addr = (HeapWord*)obj;
   814       if (_g1h->is_in_g1_reserved(addr)) {
   815         _cm->grayRoot(obj);
   816       }
   817     }
   818     if (_do_barrier) {
   819       assert(!_g1h->is_in_g1_reserved(p),
   820              "Should be called on external roots");
   821       do_barrier(p);
   822     }
   823   }
   824 };
   826 void ConcurrentMark::checkpointRootsInitialPost() {
   827   G1CollectedHeap*   g1h = G1CollectedHeap::heap();
   829   // For each region note start of marking.
   830   NoteStartOfMarkHRClosure startcl;
   831   g1h->heap_region_iterate(&startcl);
   833   // Start weak-reference discovery.
   834   ReferenceProcessor* rp = g1h->ref_processor();
   835   rp->verify_no_references_recorded();
   836   rp->enable_discovery(); // enable ("weak") refs discovery
   837   rp->setup_policy(false); // snapshot the soft ref policy to be used in this cycle
   839   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
   840   // This is the start of  the marking cycle, we're expected all
   841   // threads to have SATB queues with active set to false.
   842   satb_mq_set.set_active_all_threads(true, /* new active value */
   843                                      false /* expected_active */);
   845   // update_g1_committed() will be called at the end of an evac pause
   846   // when marking is on. So, it's also called at the end of the
   847   // initial-mark pause to update the heap end, if the heap expands
   848   // during it. No need to call it here.
   849 }
   851 // Checkpoint the roots into this generation from outside
   852 // this generation. [Note this initial checkpoint need only
   853 // be approximate -- we'll do a catch up phase subsequently.]
   854 void ConcurrentMark::checkpointRootsInitial() {
   855   assert(SafepointSynchronize::is_at_safepoint(), "world should be stopped");
   856   G1CollectedHeap* g1h = G1CollectedHeap::heap();
   858   double start = os::elapsedTime();
   860   G1CollectorPolicy* g1p = G1CollectedHeap::heap()->g1_policy();
   861   g1p->record_concurrent_mark_init_start();
   862   checkpointRootsInitialPre();
   864   // YSR: when concurrent precleaning is in place, we'll
   865   // need to clear the cached card table here
   867   ResourceMark rm;
   868   HandleMark  hm;
   870   g1h->ensure_parsability(false);
   871   g1h->perm_gen()->save_marks();
   873   CMMarkRootsClosure notOlder(this, g1h, false);
   874   CMMarkRootsClosure older(this, g1h, true);
   876   g1h->set_marking_started();
   877   g1h->rem_set()->prepare_for_younger_refs_iterate(false);
   879   g1h->process_strong_roots(true,    // activate StrongRootsScope
   880                             false,   // fake perm gen collection
   881                             SharedHeap::SO_AllClasses,
   882                             &notOlder, // Regular roots
   883                             NULL,     // do not visit active blobs
   884                             &older    // Perm Gen Roots
   885                             );
   886   checkpointRootsInitialPost();
   888   // Statistics.
   889   double end = os::elapsedTime();
   890   _init_times.add((end - start) * 1000.0);
   892   g1p->record_concurrent_mark_init_end();
   893 }
   895 /*
   896    Notice that in the next two methods, we actually leave the STS
   897    during the barrier sync and join it immediately afterwards. If we
   898    do not do this, this then the following deadlock can occur: one
   899    thread could be in the barrier sync code, waiting for the other
   900    thread to also sync up, whereas another one could be trying to
   901    yield, while also waiting for the other threads to sync up too.
   903    Because the thread that does the sync barrier has left the STS, it
   904    is possible to be suspended for a Full GC or an evacuation pause
   905    could occur. This is actually safe, since the entering the sync
   906    barrier is one of the last things do_marking_step() does, and it
   907    doesn't manipulate any data structures afterwards.
   908 */
   910 void ConcurrentMark::enter_first_sync_barrier(int task_num) {
   911   if (verbose_low())
   912     gclog_or_tty->print_cr("[%d] entering first barrier", task_num);
   914   ConcurrentGCThread::stsLeave();
   915   _first_overflow_barrier_sync.enter();
   916   ConcurrentGCThread::stsJoin();
   917   // at this point everyone should have synced up and not be doing any
   918   // more work
   920   if (verbose_low())
   921     gclog_or_tty->print_cr("[%d] leaving first barrier", task_num);
   923   // let task 0 do this
   924   if (task_num == 0) {
   925     // task 0 is responsible for clearing the global data structures
   926     clear_marking_state();
   928     if (PrintGC) {
   929       gclog_or_tty->date_stamp(PrintGCDateStamps);
   930       gclog_or_tty->stamp(PrintGCTimeStamps);
   931       gclog_or_tty->print_cr("[GC concurrent-mark-reset-for-overflow]");
   932     }
   933   }
   935   // after this, each task should reset its own data structures then
   936   // then go into the second barrier
   937 }
   939 void ConcurrentMark::enter_second_sync_barrier(int task_num) {
   940   if (verbose_low())
   941     gclog_or_tty->print_cr("[%d] entering second barrier", task_num);
   943   ConcurrentGCThread::stsLeave();
   944   _second_overflow_barrier_sync.enter();
   945   ConcurrentGCThread::stsJoin();
   946   // at this point everything should be re-initialised and ready to go
   948   if (verbose_low())
   949     gclog_or_tty->print_cr("[%d] leaving second barrier", task_num);
   950 }
   952 void ConcurrentMark::grayRoot(oop p) {
   953   HeapWord* addr = (HeapWord*) p;
   954   // We can't really check against _heap_start and _heap_end, since it
   955   // is possible during an evacuation pause with piggy-backed
   956   // initial-mark that the committed space is expanded during the
   957   // pause without CM observing this change. So the assertions below
   958   // is a bit conservative; but better than nothing.
   959   assert(_g1h->g1_committed().contains(addr),
   960          "address should be within the heap bounds");
   962   if (!_nextMarkBitMap->isMarked(addr))
   963     _nextMarkBitMap->parMark(addr);
   964 }
   966 void ConcurrentMark::grayRegionIfNecessary(MemRegion mr) {
   967   // The objects on the region have already been marked "in bulk" by
   968   // the caller. We only need to decide whether to push the region on
   969   // the region stack or not.
   971   if (!concurrent_marking_in_progress() || !_should_gray_objects)
   972     // We're done with marking and waiting for remark. We do not need to
   973     // push anything else on the region stack.
   974     return;
   976   HeapWord* finger = _finger;
   978   if (verbose_low())
   979     gclog_or_tty->print_cr("[global] attempting to push "
   980                            "region ["PTR_FORMAT", "PTR_FORMAT"), finger is at "
   981                            PTR_FORMAT, mr.start(), mr.end(), finger);
   983   if (mr.start() < finger) {
   984     // The finger is always heap region aligned and it is not possible
   985     // for mr to span heap regions.
   986     assert(mr.end() <= finger, "invariant");
   988     // Separated the asserts so that we know which one fires.
   989     assert(mr.start() <= mr.end(),
   990            "region boundaries should fall within the committed space");
   991     assert(_heap_start <= mr.start(),
   992            "region boundaries should fall within the committed space");
   993     assert(mr.end() <= _heap_end,
   994            "region boundaries should fall within the committed space");
   995     if (verbose_low())
   996       gclog_or_tty->print_cr("[global] region ["PTR_FORMAT", "PTR_FORMAT") "
   997                              "below the finger, pushing it",
   998                              mr.start(), mr.end());
  1000     if (!region_stack_push_lock_free(mr)) {
  1001       if (verbose_low())
  1002         gclog_or_tty->print_cr("[global] region stack has overflown.");
  1007 void ConcurrentMark::markAndGrayObjectIfNecessary(oop p) {
  1008   // The object is not marked by the caller. We need to at least mark
  1009   // it and maybe push in on the stack.
  1011   HeapWord* addr = (HeapWord*)p;
  1012   if (!_nextMarkBitMap->isMarked(addr)) {
  1013     // We definitely need to mark it, irrespective whether we bail out
  1014     // because we're done with marking.
  1015     if (_nextMarkBitMap->parMark(addr)) {
  1016       if (!concurrent_marking_in_progress() || !_should_gray_objects)
  1017         // If we're done with concurrent marking and we're waiting for
  1018         // remark, then we're not pushing anything on the stack.
  1019         return;
  1021       // No OrderAccess:store_load() is needed. It is implicit in the
  1022       // CAS done in parMark(addr) above
  1023       HeapWord* finger = _finger;
  1025       if (addr < finger) {
  1026         if (!mark_stack_push(oop(addr))) {
  1027           if (verbose_low())
  1028             gclog_or_tty->print_cr("[global] global stack overflow "
  1029                                    "during parMark");
  1036 class CMConcurrentMarkingTask: public AbstractGangTask {
  1037 private:
  1038   ConcurrentMark*       _cm;
  1039   ConcurrentMarkThread* _cmt;
  1041 public:
  1042   void work(int worker_i) {
  1043     assert(Thread::current()->is_ConcurrentGC_thread(),
  1044            "this should only be done by a conc GC thread");
  1045     ResourceMark rm;
  1047     double start_vtime = os::elapsedVTime();
  1049     ConcurrentGCThread::stsJoin();
  1051     assert((size_t) worker_i < _cm->active_tasks(), "invariant");
  1052     CMTask* the_task = _cm->task(worker_i);
  1053     the_task->record_start_time();
  1054     if (!_cm->has_aborted()) {
  1055       do {
  1056         double start_vtime_sec = os::elapsedVTime();
  1057         double start_time_sec = os::elapsedTime();
  1058         double mark_step_duration_ms = G1ConcMarkStepDurationMillis;
  1060         the_task->do_marking_step(mark_step_duration_ms,
  1061                                   true /* do_stealing    */,
  1062                                   true /* do_termination */);
  1064         double end_time_sec = os::elapsedTime();
  1065         double end_vtime_sec = os::elapsedVTime();
  1066         double elapsed_vtime_sec = end_vtime_sec - start_vtime_sec;
  1067         double elapsed_time_sec = end_time_sec - start_time_sec;
  1068         _cm->clear_has_overflown();
  1070         bool ret = _cm->do_yield_check(worker_i);
  1072         jlong sleep_time_ms;
  1073         if (!_cm->has_aborted() && the_task->has_aborted()) {
  1074           sleep_time_ms =
  1075             (jlong) (elapsed_vtime_sec * _cm->sleep_factor() * 1000.0);
  1076           ConcurrentGCThread::stsLeave();
  1077           os::sleep(Thread::current(), sleep_time_ms, false);
  1078           ConcurrentGCThread::stsJoin();
  1080         double end_time2_sec = os::elapsedTime();
  1081         double elapsed_time2_sec = end_time2_sec - start_time_sec;
  1083 #if 0
  1084           gclog_or_tty->print_cr("CM: elapsed %1.4lf ms, sleep %1.4lf ms, "
  1085                                  "overhead %1.4lf",
  1086                                  elapsed_vtime_sec * 1000.0, (double) sleep_time_ms,
  1087                                  the_task->conc_overhead(os::elapsedTime()) * 8.0);
  1088           gclog_or_tty->print_cr("elapsed time %1.4lf ms, time 2: %1.4lf ms",
  1089                                  elapsed_time_sec * 1000.0, elapsed_time2_sec * 1000.0);
  1090 #endif
  1091       } while (!_cm->has_aborted() && the_task->has_aborted());
  1093     the_task->record_end_time();
  1094     guarantee(!the_task->has_aborted() || _cm->has_aborted(), "invariant");
  1096     ConcurrentGCThread::stsLeave();
  1098     double end_vtime = os::elapsedVTime();
  1099     _cm->update_accum_task_vtime(worker_i, end_vtime - start_vtime);
  1102   CMConcurrentMarkingTask(ConcurrentMark* cm,
  1103                           ConcurrentMarkThread* cmt) :
  1104       AbstractGangTask("Concurrent Mark"), _cm(cm), _cmt(cmt) { }
  1106   ~CMConcurrentMarkingTask() { }
  1107 };
  1109 void ConcurrentMark::markFromRoots() {
  1110   // we might be tempted to assert that:
  1111   // assert(asynch == !SafepointSynchronize::is_at_safepoint(),
  1112   //        "inconsistent argument?");
  1113   // However that wouldn't be right, because it's possible that
  1114   // a safepoint is indeed in progress as a younger generation
  1115   // stop-the-world GC happens even as we mark in this generation.
  1117   _restart_for_overflow = false;
  1119   size_t active_workers = MAX2((size_t) 1, parallel_marking_threads());
  1120   set_phase(active_workers, true /* concurrent */);
  1122   CMConcurrentMarkingTask markingTask(this, cmThread());
  1123   if (parallel_marking_threads() > 0)
  1124     _parallel_workers->run_task(&markingTask);
  1125   else
  1126     markingTask.work(0);
  1127   print_stats();
  1130 void ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) {
  1131   // world is stopped at this checkpoint
  1132   assert(SafepointSynchronize::is_at_safepoint(),
  1133          "world should be stopped");
  1134   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  1136   // If a full collection has happened, we shouldn't do this.
  1137   if (has_aborted()) {
  1138     g1h->set_marking_complete(); // So bitmap clearing isn't confused
  1139     return;
  1142   SvcGCMarker sgcm(SvcGCMarker::OTHER);
  1144   if (VerifyDuringGC) {
  1145     HandleMark hm;  // handle scope
  1146     gclog_or_tty->print(" VerifyDuringGC:(before)");
  1147     Universe::heap()->prepare_for_verify();
  1148     Universe::verify(true, false, true);
  1151   G1CollectorPolicy* g1p = g1h->g1_policy();
  1152   g1p->record_concurrent_mark_remark_start();
  1154   double start = os::elapsedTime();
  1156   checkpointRootsFinalWork();
  1158   double mark_work_end = os::elapsedTime();
  1160   weakRefsWork(clear_all_soft_refs);
  1162   if (has_overflown()) {
  1163     // Oops.  We overflowed.  Restart concurrent marking.
  1164     _restart_for_overflow = true;
  1165     // Clear the flag. We do not need it any more.
  1166     clear_has_overflown();
  1167     if (G1TraceMarkStackOverflow)
  1168       gclog_or_tty->print_cr("\nRemark led to restart for overflow.");
  1169   } else {
  1170     SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
  1171     // We're done with marking.
  1172     // This is the end of  the marking cycle, we're expected all
  1173     // threads to have SATB queues with active set to true.
  1174     satb_mq_set.set_active_all_threads(false, /* new active value */
  1175                                        true /* expected_active */);
  1177     if (VerifyDuringGC) {
  1178       HandleMark hm;  // handle scope
  1179       gclog_or_tty->print(" VerifyDuringGC:(after)");
  1180       Universe::heap()->prepare_for_verify();
  1181       Universe::heap()->verify(/* allow_dirty */      true,
  1182                                /* silent */           false,
  1183                                /* use_prev_marking */ false);
  1185     assert(!restart_for_overflow(), "sanity");
  1188   // Reset the marking state if marking completed
  1189   if (!restart_for_overflow()) {
  1190     set_non_marking_state();
  1193 #if VERIFY_OBJS_PROCESSED
  1194   _scan_obj_cl.objs_processed = 0;
  1195   ThreadLocalObjQueue::objs_enqueued = 0;
  1196 #endif
  1198   // Statistics
  1199   double now = os::elapsedTime();
  1200   _remark_mark_times.add((mark_work_end - start) * 1000.0);
  1201   _remark_weak_ref_times.add((now - mark_work_end) * 1000.0);
  1202   _remark_times.add((now - start) * 1000.0);
  1204   g1p->record_concurrent_mark_remark_end();
  1207 #define CARD_BM_TEST_MODE 0
  1209 class CalcLiveObjectsClosure: public HeapRegionClosure {
  1211   CMBitMapRO* _bm;
  1212   ConcurrentMark* _cm;
  1213   bool _changed;
  1214   bool _yield;
  1215   size_t _words_done;
  1216   size_t _tot_live;
  1217   size_t _tot_used;
  1218   size_t _regions_done;
  1219   double _start_vtime_sec;
  1221   BitMap* _region_bm;
  1222   BitMap* _card_bm;
  1223   intptr_t _bottom_card_num;
  1224   bool _final;
  1226   void mark_card_num_range(intptr_t start_card_num, intptr_t last_card_num) {
  1227     for (intptr_t i = start_card_num; i <= last_card_num; i++) {
  1228 #if CARD_BM_TEST_MODE
  1229       guarantee(_card_bm->at(i - _bottom_card_num), "Should already be set.");
  1230 #else
  1231       _card_bm->par_at_put(i - _bottom_card_num, 1);
  1232 #endif
  1236 public:
  1237   CalcLiveObjectsClosure(bool final,
  1238                          CMBitMapRO *bm, ConcurrentMark *cm,
  1239                          BitMap* region_bm, BitMap* card_bm) :
  1240     _bm(bm), _cm(cm), _changed(false), _yield(true),
  1241     _words_done(0), _tot_live(0), _tot_used(0),
  1242     _region_bm(region_bm), _card_bm(card_bm),_final(final),
  1243     _regions_done(0), _start_vtime_sec(0.0)
  1245     _bottom_card_num =
  1246       intptr_t(uintptr_t(G1CollectedHeap::heap()->reserved_region().start()) >>
  1247                CardTableModRefBS::card_shift);
  1250   // It takes a region that's not empty (i.e., it has at least one
  1251   // live object in it and sets its corresponding bit on the region
  1252   // bitmap to 1. If the region is "starts humongous" it will also set
  1253   // to 1 the bits on the region bitmap that correspond to its
  1254   // associated "continues humongous" regions.
  1255   void set_bit_for_region(HeapRegion* hr) {
  1256     assert(!hr->continuesHumongous(), "should have filtered those out");
  1258     size_t index = hr->hrs_index();
  1259     if (!hr->startsHumongous()) {
  1260       // Normal (non-humongous) case: just set the bit.
  1261       _region_bm->par_at_put((BitMap::idx_t) index, true);
  1262     } else {
  1263       // Starts humongous case: calculate how many regions are part of
  1264       // this humongous region and then set the bit range. It might
  1265       // have been a bit more efficient to look at the object that
  1266       // spans these humongous regions to calculate their number from
  1267       // the object's size. However, it's a good idea to calculate
  1268       // this based on the metadata itself, and not the region
  1269       // contents, so that this code is not aware of what goes into
  1270       // the humongous regions (in case this changes in the future).
  1271       G1CollectedHeap* g1h = G1CollectedHeap::heap();
  1272       size_t end_index = index + 1;
  1273       while (end_index < g1h->n_regions()) {
  1274         HeapRegion* chr = g1h->region_at(end_index);
  1275         if (!chr->continuesHumongous()) {
  1276           break;
  1278         end_index += 1;
  1280       _region_bm->par_at_put_range((BitMap::idx_t) index,
  1281                                    (BitMap::idx_t) end_index, true);
  1285   bool doHeapRegion(HeapRegion* hr) {
  1286     if (!_final && _regions_done == 0)
  1287       _start_vtime_sec = os::elapsedVTime();
  1289     if (hr->continuesHumongous()) {
  1290       // We will ignore these here and process them when their
  1291       // associated "starts humongous" region is processed (see
  1292       // set_bit_for_heap_region()). Note that we cannot rely on their
  1293       // associated "starts humongous" region to have their bit set to
  1294       // 1 since, due to the region chunking in the parallel region
  1295       // iteration, a "continues humongous" region might be visited
  1296       // before its associated "starts humongous".
  1297       return false;
  1300     HeapWord* nextTop = hr->next_top_at_mark_start();
  1301     HeapWord* start   = hr->top_at_conc_mark_count();
  1302     assert(hr->bottom() <= start && start <= hr->end() &&
  1303            hr->bottom() <= nextTop && nextTop <= hr->end() &&
  1304            start <= nextTop,
  1305            "Preconditions.");
  1306     // Otherwise, record the number of word's we'll examine.
  1307     size_t words_done = (nextTop - start);
  1308     // Find the first marked object at or after "start".
  1309     start = _bm->getNextMarkedWordAddress(start, nextTop);
  1310     size_t marked_bytes = 0;
  1312     // Below, the term "card num" means the result of shifting an address
  1313     // by the card shift -- address 0 corresponds to card number 0.  One
  1314     // must subtract the card num of the bottom of the heap to obtain a
  1315     // card table index.
  1316     // The first card num of the sequence of live cards currently being
  1317     // constructed.  -1 ==> no sequence.
  1318     intptr_t start_card_num = -1;
  1319     // The last card num of the sequence of live cards currently being
  1320     // constructed.  -1 ==> no sequence.
  1321     intptr_t last_card_num = -1;
  1323     while (start < nextTop) {
  1324       if (_yield && _cm->do_yield_check()) {
  1325         // We yielded.  It might be for a full collection, in which case
  1326         // all bets are off; terminate the traversal.
  1327         if (_cm->has_aborted()) {
  1328           _changed = false;
  1329           return true;
  1330         } else {
  1331           // Otherwise, it might be a collection pause, and the region
  1332           // we're looking at might be in the collection set.  We'll
  1333           // abandon this region.
  1334           return false;
  1337       oop obj = oop(start);
  1338       int obj_sz = obj->size();
  1339       // The card num of the start of the current object.
  1340       intptr_t obj_card_num =
  1341         intptr_t(uintptr_t(start) >> CardTableModRefBS::card_shift);
  1343       HeapWord* obj_last = start + obj_sz - 1;
  1344       intptr_t obj_last_card_num =
  1345         intptr_t(uintptr_t(obj_last) >> CardTableModRefBS::card_shift);
  1347       if (obj_card_num != last_card_num) {
  1348         if (start_card_num == -1) {
  1349           assert(last_card_num == -1, "Both or neither.");
  1350           start_card_num = obj_card_num;
  1351         } else {
  1352           assert(last_card_num != -1, "Both or neither.");
  1353           assert(obj_card_num >= last_card_num, "Inv");
  1354           if ((obj_card_num - last_card_num) > 1) {
  1355             // Mark the last run, and start a new one.
  1356             mark_card_num_range(start_card_num, last_card_num);
  1357             start_card_num = obj_card_num;
  1360 #if CARD_BM_TEST_MODE
  1361         /*
  1362         gclog_or_tty->print_cr("Setting bits from %d/%d.",
  1363                                obj_card_num - _bottom_card_num,
  1364                                obj_last_card_num - _bottom_card_num);
  1365         */
  1366         for (intptr_t j = obj_card_num; j <= obj_last_card_num; j++) {
  1367           _card_bm->par_at_put(j - _bottom_card_num, 1);
  1369 #endif
  1371       // In any case, we set the last card num.
  1372       last_card_num = obj_last_card_num;
  1374       marked_bytes += (size_t)obj_sz * HeapWordSize;
  1375       // Find the next marked object after this one.
  1376       start = _bm->getNextMarkedWordAddress(start + 1, nextTop);
  1377       _changed = true;
  1379     // Handle the last range, if any.
  1380     if (start_card_num != -1)
  1381       mark_card_num_range(start_card_num, last_card_num);
  1382     if (_final) {
  1383       // Mark the allocated-since-marking portion...
  1384       HeapWord* tp = hr->top();
  1385       if (nextTop < tp) {
  1386         start_card_num =
  1387           intptr_t(uintptr_t(nextTop) >> CardTableModRefBS::card_shift);
  1388         last_card_num =
  1389           intptr_t(uintptr_t(tp) >> CardTableModRefBS::card_shift);
  1390         mark_card_num_range(start_card_num, last_card_num);
  1391         // This definitely means the region has live objects.
  1392         set_bit_for_region(hr);
  1396     hr->add_to_marked_bytes(marked_bytes);
  1397     // Update the live region bitmap.
  1398     if (marked_bytes > 0) {
  1399       set_bit_for_region(hr);
  1401     hr->set_top_at_conc_mark_count(nextTop);
  1402     _tot_live += hr->next_live_bytes();
  1403     _tot_used += hr->used();
  1404     _words_done = words_done;
  1406     if (!_final) {
  1407       ++_regions_done;
  1408       if (_regions_done % 10 == 0) {
  1409         double end_vtime_sec = os::elapsedVTime();
  1410         double elapsed_vtime_sec = end_vtime_sec - _start_vtime_sec;
  1411         if (elapsed_vtime_sec > (10.0 / 1000.0)) {
  1412           jlong sleep_time_ms =
  1413             (jlong) (elapsed_vtime_sec * _cm->cleanup_sleep_factor() * 1000.0);
  1414           os::sleep(Thread::current(), sleep_time_ms, false);
  1415           _start_vtime_sec = end_vtime_sec;
  1420     return false;
  1423   bool changed() { return _changed;  }
  1424   void reset()   { _changed = false; _words_done = 0; }
  1425   void no_yield() { _yield = false; }
  1426   size_t words_done() { return _words_done; }
  1427   size_t tot_live() { return _tot_live; }
  1428   size_t tot_used() { return _tot_used; }
  1429 };
  1432 void ConcurrentMark::calcDesiredRegions() {
  1433   _region_bm.clear();
  1434   _card_bm.clear();
  1435   CalcLiveObjectsClosure calccl(false /*final*/,
  1436                                 nextMarkBitMap(), this,
  1437                                 &_region_bm, &_card_bm);
  1438   G1CollectedHeap *g1h = G1CollectedHeap::heap();
  1439   g1h->heap_region_iterate(&calccl);
  1441   do {
  1442     calccl.reset();
  1443     g1h->heap_region_iterate(&calccl);
  1444   } while (calccl.changed());
  1447 class G1ParFinalCountTask: public AbstractGangTask {
  1448 protected:
  1449   G1CollectedHeap* _g1h;
  1450   CMBitMap* _bm;
  1451   size_t _n_workers;
  1452   size_t *_live_bytes;
  1453   size_t *_used_bytes;
  1454   BitMap* _region_bm;
  1455   BitMap* _card_bm;
  1456 public:
  1457   G1ParFinalCountTask(G1CollectedHeap* g1h, CMBitMap* bm,
  1458                       BitMap* region_bm, BitMap* card_bm) :
  1459     AbstractGangTask("G1 final counting"), _g1h(g1h),
  1460     _bm(bm), _region_bm(region_bm), _card_bm(card_bm)
  1462     if (ParallelGCThreads > 0)
  1463       _n_workers = _g1h->workers()->total_workers();
  1464     else
  1465       _n_workers = 1;
  1466     _live_bytes = NEW_C_HEAP_ARRAY(size_t, _n_workers);
  1467     _used_bytes = NEW_C_HEAP_ARRAY(size_t, _n_workers);
  1470   ~G1ParFinalCountTask() {
  1471     FREE_C_HEAP_ARRAY(size_t, _live_bytes);
  1472     FREE_C_HEAP_ARRAY(size_t, _used_bytes);
  1475   void work(int i) {
  1476     CalcLiveObjectsClosure calccl(true /*final*/,
  1477                                   _bm, _g1h->concurrent_mark(),
  1478                                   _region_bm, _card_bm);
  1479     calccl.no_yield();
  1480     if (G1CollectedHeap::use_parallel_gc_threads()) {
  1481       _g1h->heap_region_par_iterate_chunked(&calccl, i,
  1482                                             HeapRegion::FinalCountClaimValue);
  1483     } else {
  1484       _g1h->heap_region_iterate(&calccl);
  1486     assert(calccl.complete(), "Shouldn't have yielded!");
  1488     assert((size_t) i < _n_workers, "invariant");
  1489     _live_bytes[i] = calccl.tot_live();
  1490     _used_bytes[i] = calccl.tot_used();
  1492   size_t live_bytes()  {
  1493     size_t live_bytes = 0;
  1494     for (size_t i = 0; i < _n_workers; ++i)
  1495       live_bytes += _live_bytes[i];
  1496     return live_bytes;
  1498   size_t used_bytes()  {
  1499     size_t used_bytes = 0;
  1500     for (size_t i = 0; i < _n_workers; ++i)
  1501       used_bytes += _used_bytes[i];
  1502     return used_bytes;
  1504 };
  1506 class G1ParNoteEndTask;
  1508 class G1NoteEndOfConcMarkClosure : public HeapRegionClosure {
  1509   G1CollectedHeap* _g1;
  1510   int _worker_num;
  1511   size_t _max_live_bytes;
  1512   size_t _regions_claimed;
  1513   size_t _freed_bytes;
  1514   FreeRegionList* _local_cleanup_list;
  1515   HumongousRegionSet* _humongous_proxy_set;
  1516   HRRSCleanupTask* _hrrs_cleanup_task;
  1517   double _claimed_region_time;
  1518   double _max_region_time;
  1520 public:
  1521   G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1,
  1522                              int worker_num,
  1523                              FreeRegionList* local_cleanup_list,
  1524                              HumongousRegionSet* humongous_proxy_set,
  1525                              HRRSCleanupTask* hrrs_cleanup_task);
  1526   size_t freed_bytes() { return _freed_bytes; }
  1528   bool doHeapRegion(HeapRegion *r);
  1530   size_t max_live_bytes() { return _max_live_bytes; }
  1531   size_t regions_claimed() { return _regions_claimed; }
  1532   double claimed_region_time_sec() { return _claimed_region_time; }
  1533   double max_region_time_sec() { return _max_region_time; }
  1534 };
  1536 class G1ParNoteEndTask: public AbstractGangTask {
  1537   friend class G1NoteEndOfConcMarkClosure;
  1539 protected:
  1540   G1CollectedHeap* _g1h;
  1541   size_t _max_live_bytes;
  1542   size_t _freed_bytes;
  1543   FreeRegionList* _cleanup_list;
  1545 public:
  1546   G1ParNoteEndTask(G1CollectedHeap* g1h,
  1547                    FreeRegionList* cleanup_list) :
  1548     AbstractGangTask("G1 note end"), _g1h(g1h),
  1549     _max_live_bytes(0), _freed_bytes(0), _cleanup_list(cleanup_list) { }
  1551   void work(int i) {
  1552     double start = os::elapsedTime();
  1553     FreeRegionList local_cleanup_list("Local Cleanup List");
  1554     HumongousRegionSet humongous_proxy_set("Local Cleanup Humongous Proxy Set");
  1555     HRRSCleanupTask hrrs_cleanup_task;
  1556     G1NoteEndOfConcMarkClosure g1_note_end(_g1h, i, &local_cleanup_list,
  1557                                            &humongous_proxy_set,
  1558                                            &hrrs_cleanup_task);
  1559     if (G1CollectedHeap::use_parallel_gc_threads()) {
  1560       _g1h->heap_region_par_iterate_chunked(&g1_note_end, i,
  1561                                             HeapRegion::NoteEndClaimValue);
  1562     } else {
  1563       _g1h->heap_region_iterate(&g1_note_end);
  1565     assert(g1_note_end.complete(), "Shouldn't have yielded!");
  1567     // Now update the lists
  1568     _g1h->update_sets_after_freeing_regions(g1_note_end.freed_bytes(),
  1569                                             NULL /* free_list */,
  1570                                             &humongous_proxy_set,
  1571                                             true /* par */);
  1573       MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
  1574       _max_live_bytes += g1_note_end.max_live_bytes();
  1575       _freed_bytes += g1_note_end.freed_bytes();
  1577       _cleanup_list->add_as_tail(&local_cleanup_list);
  1578       assert(local_cleanup_list.is_empty(), "post-condition");
  1580       HeapRegionRemSet::finish_cleanup_task(&hrrs_cleanup_task);
  1582     double end = os::elapsedTime();
  1583     if (G1PrintParCleanupStats) {
  1584       gclog_or_tty->print("     Worker thread %d [%8.3f..%8.3f = %8.3f ms] "
  1585                           "claimed %d regions (tot = %8.3f ms, max = %8.3f ms).\n",
  1586                           i, start, end, (end-start)*1000.0,
  1587                           g1_note_end.regions_claimed(),
  1588                           g1_note_end.claimed_region_time_sec()*1000.0,
  1589                           g1_note_end.max_region_time_sec()*1000.0);
  1592   size_t max_live_bytes() { return _max_live_bytes; }
  1593   size_t freed_bytes() { return _freed_bytes; }
  1594 };
  1596 class G1ParScrubRemSetTask: public AbstractGangTask {
  1597 protected:
  1598   G1RemSet* _g1rs;
  1599   BitMap* _region_bm;
  1600   BitMap* _card_bm;
  1601 public:
  1602   G1ParScrubRemSetTask(G1CollectedHeap* g1h,
  1603                        BitMap* region_bm, BitMap* card_bm) :
  1604     AbstractGangTask("G1 ScrubRS"), _g1rs(g1h->g1_rem_set()),
  1605     _region_bm(region_bm), _card_bm(card_bm)
  1606   {}
  1608   void work(int i) {
  1609     if (G1CollectedHeap::use_parallel_gc_threads()) {
  1610       _g1rs->scrub_par(_region_bm, _card_bm, i,
  1611                        HeapRegion::ScrubRemSetClaimValue);
  1612     } else {
  1613       _g1rs->scrub(_region_bm, _card_bm);
  1617 };
  1619 G1NoteEndOfConcMarkClosure::
  1620 G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1,
  1621                            int worker_num,
  1622                            FreeRegionList* local_cleanup_list,
  1623                            HumongousRegionSet* humongous_proxy_set,
  1624                            HRRSCleanupTask* hrrs_cleanup_task)
  1625   : _g1(g1), _worker_num(worker_num),
  1626     _max_live_bytes(0), _regions_claimed(0),
  1627     _freed_bytes(0),
  1628     _claimed_region_time(0.0), _max_region_time(0.0),
  1629     _local_cleanup_list(local_cleanup_list),
  1630     _humongous_proxy_set(humongous_proxy_set),
  1631     _hrrs_cleanup_task(hrrs_cleanup_task) { }
  1633 bool G1NoteEndOfConcMarkClosure::doHeapRegion(HeapRegion *hr) {
  1634   // We use a claim value of zero here because all regions
  1635   // were claimed with value 1 in the FinalCount task.
  1636   hr->reset_gc_time_stamp();
  1637   if (!hr->continuesHumongous()) {
  1638     double start = os::elapsedTime();
  1639     _regions_claimed++;
  1640     hr->note_end_of_marking();
  1641     _max_live_bytes += hr->max_live_bytes();
  1642     _g1->free_region_if_empty(hr,
  1643                               &_freed_bytes,
  1644                               _local_cleanup_list,
  1645                               _humongous_proxy_set,
  1646                               _hrrs_cleanup_task,
  1647                               true /* par */);
  1648     double region_time = (os::elapsedTime() - start);
  1649     _claimed_region_time += region_time;
  1650     if (region_time > _max_region_time) _max_region_time = region_time;
  1652   return false;
  1655 void ConcurrentMark::cleanup() {
  1656   // world is stopped at this checkpoint
  1657   assert(SafepointSynchronize::is_at_safepoint(),
  1658          "world should be stopped");
  1659   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  1661   // If a full collection has happened, we shouldn't do this.
  1662   if (has_aborted()) {
  1663     g1h->set_marking_complete(); // So bitmap clearing isn't confused
  1664     return;
  1667   g1h->verify_region_sets_optional();
  1669   if (VerifyDuringGC) {
  1670     HandleMark hm;  // handle scope
  1671     gclog_or_tty->print(" VerifyDuringGC:(before)");
  1672     Universe::heap()->prepare_for_verify();
  1673     Universe::verify(/* allow dirty  */ true,
  1674                      /* silent       */ false,
  1675                      /* prev marking */ true);
  1678   G1CollectorPolicy* g1p = G1CollectedHeap::heap()->g1_policy();
  1679   g1p->record_concurrent_mark_cleanup_start();
  1681   double start = os::elapsedTime();
  1683   HeapRegionRemSet::reset_for_cleanup_tasks();
  1685   // Do counting once more with the world stopped for good measure.
  1686   G1ParFinalCountTask g1_par_count_task(g1h, nextMarkBitMap(),
  1687                                         &_region_bm, &_card_bm);
  1688   if (G1CollectedHeap::use_parallel_gc_threads()) {
  1689     assert(g1h->check_heap_region_claim_values(
  1690                                                HeapRegion::InitialClaimValue),
  1691            "sanity check");
  1693     int n_workers = g1h->workers()->total_workers();
  1694     g1h->set_par_threads(n_workers);
  1695     g1h->workers()->run_task(&g1_par_count_task);
  1696     g1h->set_par_threads(0);
  1698     assert(g1h->check_heap_region_claim_values(
  1699                                              HeapRegion::FinalCountClaimValue),
  1700            "sanity check");
  1701   } else {
  1702     g1_par_count_task.work(0);
  1705   size_t known_garbage_bytes =
  1706     g1_par_count_task.used_bytes() - g1_par_count_task.live_bytes();
  1707 #if 0
  1708   gclog_or_tty->print_cr("used %1.2lf, live %1.2lf, garbage %1.2lf",
  1709                          (double) g1_par_count_task.used_bytes() / (double) (1024 * 1024),
  1710                          (double) g1_par_count_task.live_bytes() / (double) (1024 * 1024),
  1711                          (double) known_garbage_bytes / (double) (1024 * 1024));
  1712 #endif // 0
  1713   g1p->set_known_garbage_bytes(known_garbage_bytes);
  1715   size_t start_used_bytes = g1h->used();
  1716   _at_least_one_mark_complete = true;
  1717   g1h->set_marking_complete();
  1719   double count_end = os::elapsedTime();
  1720   double this_final_counting_time = (count_end - start);
  1721   if (G1PrintParCleanupStats) {
  1722     gclog_or_tty->print_cr("Cleanup:");
  1723     gclog_or_tty->print_cr("  Finalize counting: %8.3f ms",
  1724                            this_final_counting_time*1000.0);
  1726   _total_counting_time += this_final_counting_time;
  1728   if (G1PrintRegionLivenessInfo) {
  1729     G1PrintRegionLivenessInfoClosure cl(gclog_or_tty, "Post-Marking");
  1730     _g1h->heap_region_iterate(&cl);
  1733   // Install newly created mark bitMap as "prev".
  1734   swapMarkBitMaps();
  1736   g1h->reset_gc_time_stamp();
  1738   // Note end of marking in all heap regions.
  1739   double note_end_start = os::elapsedTime();
  1740   G1ParNoteEndTask g1_par_note_end_task(g1h, &_cleanup_list);
  1741   if (G1CollectedHeap::use_parallel_gc_threads()) {
  1742     int n_workers = g1h->workers()->total_workers();
  1743     g1h->set_par_threads(n_workers);
  1744     g1h->workers()->run_task(&g1_par_note_end_task);
  1745     g1h->set_par_threads(0);
  1747     assert(g1h->check_heap_region_claim_values(HeapRegion::NoteEndClaimValue),
  1748            "sanity check");
  1749   } else {
  1750     g1_par_note_end_task.work(0);
  1753   if (!cleanup_list_is_empty()) {
  1754     // The cleanup list is not empty, so we'll have to process it
  1755     // concurrently. Notify anyone else that might be wanting free
  1756     // regions that there will be more free regions coming soon.
  1757     g1h->set_free_regions_coming();
  1759   double note_end_end = os::elapsedTime();
  1760   if (G1PrintParCleanupStats) {
  1761     gclog_or_tty->print_cr("  note end of marking: %8.3f ms.",
  1762                            (note_end_end - note_end_start)*1000.0);
  1766   // call below, since it affects the metric by which we sort the heap
  1767   // regions.
  1768   if (G1ScrubRemSets) {
  1769     double rs_scrub_start = os::elapsedTime();
  1770     G1ParScrubRemSetTask g1_par_scrub_rs_task(g1h, &_region_bm, &_card_bm);
  1771     if (G1CollectedHeap::use_parallel_gc_threads()) {
  1772       int n_workers = g1h->workers()->total_workers();
  1773       g1h->set_par_threads(n_workers);
  1774       g1h->workers()->run_task(&g1_par_scrub_rs_task);
  1775       g1h->set_par_threads(0);
  1777       assert(g1h->check_heap_region_claim_values(
  1778                                             HeapRegion::ScrubRemSetClaimValue),
  1779              "sanity check");
  1780     } else {
  1781       g1_par_scrub_rs_task.work(0);
  1784     double rs_scrub_end = os::elapsedTime();
  1785     double this_rs_scrub_time = (rs_scrub_end - rs_scrub_start);
  1786     _total_rs_scrub_time += this_rs_scrub_time;
  1789   // this will also free any regions totally full of garbage objects,
  1790   // and sort the regions.
  1791   g1h->g1_policy()->record_concurrent_mark_cleanup_end(
  1792                         g1_par_note_end_task.freed_bytes(),
  1793                         g1_par_note_end_task.max_live_bytes());
  1795   // Statistics.
  1796   double end = os::elapsedTime();
  1797   _cleanup_times.add((end - start) * 1000.0);
  1799   // G1CollectedHeap::heap()->print();
  1800   // gclog_or_tty->print_cr("HEAP GC TIME STAMP : %d",
  1801   // G1CollectedHeap::heap()->get_gc_time_stamp());
  1803   if (PrintGC || PrintGCDetails) {
  1804     g1h->print_size_transition(gclog_or_tty,
  1805                                start_used_bytes,
  1806                                g1h->used(),
  1807                                g1h->capacity());
  1810   size_t cleaned_up_bytes = start_used_bytes - g1h->used();
  1811   g1p->decrease_known_garbage_bytes(cleaned_up_bytes);
  1813   // We need to make this be a "collection" so any collection pause that
  1814   // races with it goes around and waits for completeCleanup to finish.
  1815   g1h->increment_total_collections();
  1817   if (VerifyDuringGC) {
  1818     HandleMark hm;  // handle scope
  1819     gclog_or_tty->print(" VerifyDuringGC:(after)");
  1820     Universe::heap()->prepare_for_verify();
  1821     Universe::verify(/* allow dirty  */ true,
  1822                      /* silent       */ false,
  1823                      /* prev marking */ true);
  1826   g1h->verify_region_sets_optional();
  1829 void ConcurrentMark::completeCleanup() {
  1830   if (has_aborted()) return;
  1832   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  1834   _cleanup_list.verify_optional();
  1835   FreeRegionList tmp_free_list("Tmp Free List");
  1837   if (G1ConcRegionFreeingVerbose) {
  1838     gclog_or_tty->print_cr("G1ConcRegionFreeing [complete cleanup] : "
  1839                            "cleanup list has "SIZE_FORMAT" entries",
  1840                            _cleanup_list.length());
  1843   // Noone else should be accessing the _cleanup_list at this point,
  1844   // so it's not necessary to take any locks
  1845   while (!_cleanup_list.is_empty()) {
  1846     HeapRegion* hr = _cleanup_list.remove_head();
  1847     assert(hr != NULL, "the list was not empty");
  1848     hr->rem_set()->clear();
  1849     tmp_free_list.add_as_tail(hr);
  1851     // Instead of adding one region at a time to the secondary_free_list,
  1852     // we accumulate them in the local list and move them a few at a
  1853     // time. This also cuts down on the number of notify_all() calls
  1854     // we do during this process. We'll also append the local list when
  1855     // _cleanup_list is empty (which means we just removed the last
  1856     // region from the _cleanup_list).
  1857     if ((tmp_free_list.length() % G1SecondaryFreeListAppendLength == 0) ||
  1858         _cleanup_list.is_empty()) {
  1859       if (G1ConcRegionFreeingVerbose) {
  1860         gclog_or_tty->print_cr("G1ConcRegionFreeing [complete cleanup] : "
  1861                                "appending "SIZE_FORMAT" entries to the "
  1862                                "secondary_free_list, clean list still has "
  1863                                SIZE_FORMAT" entries",
  1864                                tmp_free_list.length(),
  1865                                _cleanup_list.length());
  1869         MutexLockerEx x(SecondaryFreeList_lock, Mutex::_no_safepoint_check_flag);
  1870         g1h->secondary_free_list_add_as_tail(&tmp_free_list);
  1871         SecondaryFreeList_lock->notify_all();
  1874       if (G1StressConcRegionFreeing) {
  1875         for (uintx i = 0; i < G1StressConcRegionFreeingDelayMillis; ++i) {
  1876           os::sleep(Thread::current(), (jlong) 1, false);
  1881   assert(tmp_free_list.is_empty(), "post-condition");
  1884 // Support closures for reference procssing in G1
  1886 bool G1CMIsAliveClosure::do_object_b(oop obj) {
  1887   HeapWord* addr = (HeapWord*)obj;
  1888   return addr != NULL &&
  1889          (!_g1->is_in_g1_reserved(addr) || !_g1->is_obj_ill(obj));
  1892 class G1CMKeepAliveClosure: public OopClosure {
  1893   G1CollectedHeap* _g1;
  1894   ConcurrentMark*  _cm;
  1895   CMBitMap*        _bitMap;
  1896  public:
  1897   G1CMKeepAliveClosure(G1CollectedHeap* g1, ConcurrentMark* cm,
  1898                        CMBitMap* bitMap) :
  1899     _g1(g1), _cm(cm),
  1900     _bitMap(bitMap) {}
  1902   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  1903   virtual void do_oop(      oop* p) { do_oop_work(p); }
  1905   template <class T> void do_oop_work(T* p) {
  1906     oop obj = oopDesc::load_decode_heap_oop(p);
  1907     HeapWord* addr = (HeapWord*)obj;
  1909     if (_cm->verbose_high())
  1910       gclog_or_tty->print_cr("\t[0] we're looking at location "
  1911                                "*"PTR_FORMAT" = "PTR_FORMAT,
  1912                                p, (void*) obj);
  1914     if (_g1->is_in_g1_reserved(addr) && _g1->is_obj_ill(obj)) {
  1915       _bitMap->mark(addr);
  1916       _cm->mark_stack_push(obj);
  1919 };
  1921 class G1CMDrainMarkingStackClosure: public VoidClosure {
  1922   CMMarkStack*                  _markStack;
  1923   CMBitMap*                     _bitMap;
  1924   G1CMKeepAliveClosure*         _oopClosure;
  1925  public:
  1926   G1CMDrainMarkingStackClosure(CMBitMap* bitMap, CMMarkStack* markStack,
  1927                                G1CMKeepAliveClosure* oopClosure) :
  1928     _bitMap(bitMap),
  1929     _markStack(markStack),
  1930     _oopClosure(oopClosure)
  1931   {}
  1933   void do_void() {
  1934     _markStack->drain((OopClosure*)_oopClosure, _bitMap, false);
  1936 };
  1938 // 'Keep Alive' closure used by parallel reference processing.
  1939 // An instance of this closure is used in the parallel reference processing
  1940 // code rather than an instance of G1CMKeepAliveClosure. We could have used
  1941 // the G1CMKeepAliveClosure as it is MT-safe. Also reference objects are
  1942 // placed on to discovered ref lists once so we can mark and push with no
  1943 // need to check whether the object has already been marked. Using the
  1944 // G1CMKeepAliveClosure would mean, however, having all the worker threads
  1945 // operating on the global mark stack. This means that an individual
  1946 // worker would be doing lock-free pushes while it processes its own
  1947 // discovered ref list followed by drain call. If the discovered ref lists
  1948 // are unbalanced then this could cause interference with the other
  1949 // workers. Using a CMTask (and its embedded local data structures)
  1950 // avoids that potential interference.
  1951 class G1CMParKeepAliveAndDrainClosure: public OopClosure {
  1952   ConcurrentMark*  _cm;
  1953   CMTask*          _task;
  1954   CMBitMap*        _bitMap;
  1955   int              _ref_counter_limit;
  1956   int              _ref_counter;
  1957  public:
  1958   G1CMParKeepAliveAndDrainClosure(ConcurrentMark* cm,
  1959                                   CMTask* task,
  1960                                   CMBitMap* bitMap) :
  1961     _cm(cm), _task(task), _bitMap(bitMap),
  1962     _ref_counter_limit(G1RefProcDrainInterval)
  1964     assert(_ref_counter_limit > 0, "sanity");
  1965     _ref_counter = _ref_counter_limit;
  1968   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  1969   virtual void do_oop(      oop* p) { do_oop_work(p); }
  1971   template <class T> void do_oop_work(T* p) {
  1972     if (!_cm->has_overflown()) {
  1973       oop obj = oopDesc::load_decode_heap_oop(p);
  1974       if (_cm->verbose_high())
  1975         gclog_or_tty->print_cr("\t[%d] we're looking at location "
  1976                                "*"PTR_FORMAT" = "PTR_FORMAT,
  1977                                _task->task_id(), p, (void*) obj);
  1979       _task->deal_with_reference(obj);
  1980       _ref_counter--;
  1982       if (_ref_counter == 0) {
  1983         // We have dealt with _ref_counter_limit references, pushing them and objects
  1984         // reachable from them on to the local stack (and possibly the global stack).
  1985         // Call do_marking_step() to process these entries. We call the routine in a
  1986         // loop, which we'll exit if there's nothing more to do (i.e. we're done
  1987         // with the entries that we've pushed as a result of the deal_with_reference
  1988         // calls above) or we overflow.
  1989         // Note: CMTask::do_marking_step() can set the CMTask::has_aborted() flag
  1990         // while there may still be some work to do. (See the comment at the
  1991         // beginning of CMTask::do_marking_step() for those conditions - one of which
  1992         // is reaching the specified time target.) It is only when
  1993         // CMTask::do_marking_step() returns without setting the has_aborted() flag
  1994         // that the marking has completed.
  1995         do {
  1996           double mark_step_duration_ms = G1ConcMarkStepDurationMillis;
  1997           _task->do_marking_step(mark_step_duration_ms,
  1998                                  false /* do_stealing    */,
  1999                                  false /* do_termination */);
  2000         } while (_task->has_aborted() && !_cm->has_overflown());
  2001         _ref_counter = _ref_counter_limit;
  2003     } else {
  2004        if (_cm->verbose_high())
  2005          gclog_or_tty->print_cr("\t[%d] CM Overflow", _task->task_id());
  2008 };
  2010 class G1CMParDrainMarkingStackClosure: public VoidClosure {
  2011   ConcurrentMark* _cm;
  2012   CMTask* _task;
  2013  public:
  2014   G1CMParDrainMarkingStackClosure(ConcurrentMark* cm, CMTask* task) :
  2015     _cm(cm), _task(task)
  2016   {}
  2018   void do_void() {
  2019     do {
  2020       if (_cm->verbose_high())
  2021         gclog_or_tty->print_cr("\t[%d] Drain: Calling do marking_step", _task->task_id());
  2023       // We call CMTask::do_marking_step() to completely drain the local and
  2024       // global marking stacks. The routine is called in a loop, which we'll
  2025       // exit if there's nothing more to do (i.e. we'completely drained the
  2026       // entries that were pushed as a result of applying the
  2027       // G1CMParKeepAliveAndDrainClosure to the entries on the discovered ref
  2028       // lists above) or we overflow the global marking stack.
  2029       // Note: CMTask::do_marking_step() can set the CMTask::has_aborted() flag
  2030       // while there may still be some work to do. (See the comment at the
  2031       // beginning of CMTask::do_marking_step() for those conditions - one of which
  2032       // is reaching the specified time target.) It is only when
  2033       // CMTask::do_marking_step() returns without setting the has_aborted() flag
  2034       // that the marking has completed.
  2036       _task->do_marking_step(1000000000.0 /* something very large */,
  2037                              true /* do_stealing    */,
  2038                              true /* do_termination */);
  2039     } while (_task->has_aborted() && !_cm->has_overflown());
  2041 };
  2043 // Implementation of AbstractRefProcTaskExecutor for G1
  2044 class G1RefProcTaskExecutor: public AbstractRefProcTaskExecutor {
  2045 private:
  2046   G1CollectedHeap* _g1h;
  2047   ConcurrentMark*  _cm;
  2048   CMBitMap*        _bitmap;
  2049   WorkGang*        _workers;
  2050   int              _active_workers;
  2052 public:
  2053   G1RefProcTaskExecutor(G1CollectedHeap* g1h,
  2054                         ConcurrentMark* cm,
  2055                         CMBitMap* bitmap,
  2056                         WorkGang* workers,
  2057                         int n_workers) :
  2058     _g1h(g1h), _cm(cm), _bitmap(bitmap),
  2059     _workers(workers), _active_workers(n_workers)
  2060   { }
  2062   // Executes the given task using concurrent marking worker threads.
  2063   virtual void execute(ProcessTask& task);
  2064   virtual void execute(EnqueueTask& task);
  2065 };
  2067 class G1RefProcTaskProxy: public AbstractGangTask {
  2068   typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask;
  2069   ProcessTask&     _proc_task;
  2070   G1CollectedHeap* _g1h;
  2071   ConcurrentMark*  _cm;
  2072   CMBitMap*        _bitmap;
  2074 public:
  2075   G1RefProcTaskProxy(ProcessTask& proc_task,
  2076                      G1CollectedHeap* g1h,
  2077                      ConcurrentMark* cm,
  2078                      CMBitMap* bitmap) :
  2079     AbstractGangTask("Process reference objects in parallel"),
  2080     _proc_task(proc_task), _g1h(g1h), _cm(cm), _bitmap(bitmap)
  2081   {}
  2083   virtual void work(int i) {
  2084     CMTask* marking_task = _cm->task(i);
  2085     G1CMIsAliveClosure g1_is_alive(_g1h);
  2086     G1CMParKeepAliveAndDrainClosure g1_par_keep_alive(_cm, marking_task, _bitmap);
  2087     G1CMParDrainMarkingStackClosure g1_par_drain(_cm, marking_task);
  2089     _proc_task.work(i, g1_is_alive, g1_par_keep_alive, g1_par_drain);
  2091 };
  2093 void G1RefProcTaskExecutor::execute(ProcessTask& proc_task) {
  2094   assert(_workers != NULL, "Need parallel worker threads.");
  2096   G1RefProcTaskProxy proc_task_proxy(proc_task, _g1h, _cm, _bitmap);
  2098   // We need to reset the phase for each task execution so that
  2099   // the termination protocol of CMTask::do_marking_step works.
  2100   _cm->set_phase(_active_workers, false /* concurrent */);
  2101   _g1h->set_par_threads(_active_workers);
  2102   _workers->run_task(&proc_task_proxy);
  2103   _g1h->set_par_threads(0);
  2106 class G1RefEnqueueTaskProxy: public AbstractGangTask {
  2107   typedef AbstractRefProcTaskExecutor::EnqueueTask EnqueueTask;
  2108   EnqueueTask& _enq_task;
  2110 public:
  2111   G1RefEnqueueTaskProxy(EnqueueTask& enq_task) :
  2112     AbstractGangTask("Enqueue reference objects in parallel"),
  2113     _enq_task(enq_task)
  2114   { }
  2116   virtual void work(int i) {
  2117     _enq_task.work(i);
  2119 };
  2121 void G1RefProcTaskExecutor::execute(EnqueueTask& enq_task) {
  2122   assert(_workers != NULL, "Need parallel worker threads.");
  2124   G1RefEnqueueTaskProxy enq_task_proxy(enq_task);
  2126   _g1h->set_par_threads(_active_workers);
  2127   _workers->run_task(&enq_task_proxy);
  2128   _g1h->set_par_threads(0);
  2131 void ConcurrentMark::weakRefsWork(bool clear_all_soft_refs) {
  2132   ResourceMark rm;
  2133   HandleMark   hm;
  2134   G1CollectedHeap* g1h   = G1CollectedHeap::heap();
  2135   ReferenceProcessor* rp = g1h->ref_processor();
  2137   // See the comment in G1CollectedHeap::ref_processing_init()
  2138   // about how reference processing currently works in G1.
  2140   // Process weak references.
  2141   rp->setup_policy(clear_all_soft_refs);
  2142   assert(_markStack.isEmpty(), "mark stack should be empty");
  2144   G1CMIsAliveClosure   g1_is_alive(g1h);
  2145   G1CMKeepAliveClosure g1_keep_alive(g1h, this, nextMarkBitMap());
  2146   G1CMDrainMarkingStackClosure
  2147     g1_drain_mark_stack(nextMarkBitMap(), &_markStack, &g1_keep_alive);
  2148   // We use the work gang from the G1CollectedHeap and we utilize all
  2149   // the worker threads.
  2150   int active_workers = g1h->workers() ? g1h->workers()->total_workers() : 1;
  2151   active_workers = MAX2(MIN2(active_workers, (int)_max_task_num), 1);
  2153   G1RefProcTaskExecutor par_task_executor(g1h, this, nextMarkBitMap(),
  2154                                           g1h->workers(), active_workers);
  2157   if (rp->processing_is_mt()) {
  2158     // Set the degree of MT here.  If the discovery is done MT, there
  2159     // may have been a different number of threads doing the discovery
  2160     // and a different number of discovered lists may have Ref objects.
  2161     // That is OK as long as the Reference lists are balanced (see
  2162     // balance_all_queues() and balance_queues()).
  2163     rp->set_active_mt_degree(active_workers);
  2165     rp->process_discovered_references(&g1_is_alive,
  2166                                       &g1_keep_alive,
  2167                                       &g1_drain_mark_stack,
  2168                                       &par_task_executor);
  2170     // The work routines of the parallel keep_alive and drain_marking_stack
  2171     // will set the has_overflown flag if we overflow the global marking
  2172     // stack.
  2173   } else {
  2174     rp->process_discovered_references(&g1_is_alive,
  2175                                       &g1_keep_alive,
  2176                                       &g1_drain_mark_stack,
  2177                                       NULL);
  2181   assert(_markStack.overflow() || _markStack.isEmpty(),
  2182       "mark stack should be empty (unless it overflowed)");
  2183   if (_markStack.overflow()) {
  2184     // Should have been done already when we tried to push an
  2185     // entry on to the global mark stack. But let's do it again.
  2186     set_has_overflown();
  2189   if (rp->processing_is_mt()) {
  2190     assert(rp->num_q() == active_workers, "why not");
  2191     rp->enqueue_discovered_references(&par_task_executor);
  2192   } else {
  2193     rp->enqueue_discovered_references();
  2196   rp->verify_no_references_recorded();
  2197   assert(!rp->discovery_enabled(), "should have been disabled");
  2199   // Now clean up stale oops in StringTable
  2200   StringTable::unlink(&g1_is_alive);
  2201   // Clean up unreferenced symbols in symbol table.
  2202   SymbolTable::unlink();
  2205 void ConcurrentMark::swapMarkBitMaps() {
  2206   CMBitMapRO* temp = _prevMarkBitMap;
  2207   _prevMarkBitMap  = (CMBitMapRO*)_nextMarkBitMap;
  2208   _nextMarkBitMap  = (CMBitMap*)  temp;
  2211 class CMRemarkTask: public AbstractGangTask {
  2212 private:
  2213   ConcurrentMark *_cm;
  2215 public:
  2216   void work(int worker_i) {
  2217     // Since all available tasks are actually started, we should
  2218     // only proceed if we're supposed to be actived.
  2219     if ((size_t)worker_i < _cm->active_tasks()) {
  2220       CMTask* task = _cm->task(worker_i);
  2221       task->record_start_time();
  2222       do {
  2223         task->do_marking_step(1000000000.0 /* something very large */,
  2224                               true /* do_stealing    */,
  2225                               true /* do_termination */);
  2226       } while (task->has_aborted() && !_cm->has_overflown());
  2227       // If we overflow, then we do not want to restart. We instead
  2228       // want to abort remark and do concurrent marking again.
  2229       task->record_end_time();
  2233   CMRemarkTask(ConcurrentMark* cm) :
  2234     AbstractGangTask("Par Remark"), _cm(cm) { }
  2235 };
  2237 void ConcurrentMark::checkpointRootsFinalWork() {
  2238   ResourceMark rm;
  2239   HandleMark   hm;
  2240   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  2242   g1h->ensure_parsability(false);
  2244   if (G1CollectedHeap::use_parallel_gc_threads()) {
  2245     G1CollectedHeap::StrongRootsScope srs(g1h);
  2246     // this is remark, so we'll use up all available threads
  2247     int active_workers = ParallelGCThreads;
  2248     set_phase(active_workers, false /* concurrent */);
  2250     CMRemarkTask remarkTask(this);
  2251     // We will start all available threads, even if we decide that the
  2252     // active_workers will be fewer. The extra ones will just bail out
  2253     // immediately.
  2254     int n_workers = g1h->workers()->total_workers();
  2255     g1h->set_par_threads(n_workers);
  2256     g1h->workers()->run_task(&remarkTask);
  2257     g1h->set_par_threads(0);
  2258   } else {
  2259     G1CollectedHeap::StrongRootsScope srs(g1h);
  2260     // this is remark, so we'll use up all available threads
  2261     int active_workers = 1;
  2262     set_phase(active_workers, false /* concurrent */);
  2264     CMRemarkTask remarkTask(this);
  2265     // We will start all available threads, even if we decide that the
  2266     // active_workers will be fewer. The extra ones will just bail out
  2267     // immediately.
  2268     remarkTask.work(0);
  2270   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
  2271   guarantee(satb_mq_set.completed_buffers_num() == 0, "invariant");
  2273   print_stats();
  2275 #if VERIFY_OBJS_PROCESSED
  2276   if (_scan_obj_cl.objs_processed != ThreadLocalObjQueue::objs_enqueued) {
  2277     gclog_or_tty->print_cr("Processed = %d, enqueued = %d.",
  2278                            _scan_obj_cl.objs_processed,
  2279                            ThreadLocalObjQueue::objs_enqueued);
  2280     guarantee(_scan_obj_cl.objs_processed ==
  2281               ThreadLocalObjQueue::objs_enqueued,
  2282               "Different number of objs processed and enqueued.");
  2284 #endif
  2287 #ifndef PRODUCT
  2289 class PrintReachableOopClosure: public OopClosure {
  2290 private:
  2291   G1CollectedHeap* _g1h;
  2292   CMBitMapRO*      _bitmap;
  2293   outputStream*    _out;
  2294   bool             _use_prev_marking;
  2295   bool             _all;
  2297 public:
  2298   PrintReachableOopClosure(CMBitMapRO*   bitmap,
  2299                            outputStream* out,
  2300                            bool          use_prev_marking,
  2301                            bool          all) :
  2302     _g1h(G1CollectedHeap::heap()),
  2303     _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking), _all(all) { }
  2305   void do_oop(narrowOop* p) { do_oop_work(p); }
  2306   void do_oop(      oop* p) { do_oop_work(p); }
  2308   template <class T> void do_oop_work(T* p) {
  2309     oop         obj = oopDesc::load_decode_heap_oop(p);
  2310     const char* str = NULL;
  2311     const char* str2 = "";
  2313     if (obj == NULL) {
  2314       str = "";
  2315     } else if (!_g1h->is_in_g1_reserved(obj)) {
  2316       str = " O";
  2317     } else {
  2318       HeapRegion* hr  = _g1h->heap_region_containing(obj);
  2319       guarantee(hr != NULL, "invariant");
  2320       bool over_tams = false;
  2321       if (_use_prev_marking) {
  2322         over_tams = hr->obj_allocated_since_prev_marking(obj);
  2323       } else {
  2324         over_tams = hr->obj_allocated_since_next_marking(obj);
  2326       bool marked = _bitmap->isMarked((HeapWord*) obj);
  2328       if (over_tams) {
  2329         str = " >";
  2330         if (marked) {
  2331           str2 = " AND MARKED";
  2333       } else if (marked) {
  2334         str = " M";
  2335       } else {
  2336         str = " NOT";
  2340     _out->print_cr("  "PTR_FORMAT": "PTR_FORMAT"%s%s",
  2341                    p, (void*) obj, str, str2);
  2343 };
  2345 class PrintReachableObjectClosure : public ObjectClosure {
  2346 private:
  2347   CMBitMapRO*   _bitmap;
  2348   outputStream* _out;
  2349   bool          _use_prev_marking;
  2350   bool          _all;
  2351   HeapRegion*   _hr;
  2353 public:
  2354   PrintReachableObjectClosure(CMBitMapRO*   bitmap,
  2355                               outputStream* out,
  2356                               bool          use_prev_marking,
  2357                               bool          all,
  2358                               HeapRegion*   hr) :
  2359     _bitmap(bitmap), _out(out),
  2360     _use_prev_marking(use_prev_marking), _all(all), _hr(hr) { }
  2362   void do_object(oop o) {
  2363     bool over_tams;
  2364     if (_use_prev_marking) {
  2365       over_tams = _hr->obj_allocated_since_prev_marking(o);
  2366     } else {
  2367       over_tams = _hr->obj_allocated_since_next_marking(o);
  2369     bool marked = _bitmap->isMarked((HeapWord*) o);
  2370     bool print_it = _all || over_tams || marked;
  2372     if (print_it) {
  2373       _out->print_cr(" "PTR_FORMAT"%s",
  2374                      o, (over_tams) ? " >" : (marked) ? " M" : "");
  2375       PrintReachableOopClosure oopCl(_bitmap, _out, _use_prev_marking, _all);
  2376       o->oop_iterate(&oopCl);
  2379 };
  2381 class PrintReachableRegionClosure : public HeapRegionClosure {
  2382 private:
  2383   CMBitMapRO*   _bitmap;
  2384   outputStream* _out;
  2385   bool          _use_prev_marking;
  2386   bool          _all;
  2388 public:
  2389   bool doHeapRegion(HeapRegion* hr) {
  2390     HeapWord* b = hr->bottom();
  2391     HeapWord* e = hr->end();
  2392     HeapWord* t = hr->top();
  2393     HeapWord* p = NULL;
  2394     if (_use_prev_marking) {
  2395       p = hr->prev_top_at_mark_start();
  2396     } else {
  2397       p = hr->next_top_at_mark_start();
  2399     _out->print_cr("** ["PTR_FORMAT", "PTR_FORMAT"] top: "PTR_FORMAT" "
  2400                    "TAMS: "PTR_FORMAT, b, e, t, p);
  2401     _out->cr();
  2403     HeapWord* from = b;
  2404     HeapWord* to   = t;
  2406     if (to > from) {
  2407       _out->print_cr("Objects in ["PTR_FORMAT", "PTR_FORMAT"]", from, to);
  2408       _out->cr();
  2409       PrintReachableObjectClosure ocl(_bitmap, _out,
  2410                                       _use_prev_marking, _all, hr);
  2411       hr->object_iterate_mem_careful(MemRegion(from, to), &ocl);
  2412       _out->cr();
  2415     return false;
  2418   PrintReachableRegionClosure(CMBitMapRO*   bitmap,
  2419                               outputStream* out,
  2420                               bool          use_prev_marking,
  2421                               bool          all) :
  2422     _bitmap(bitmap), _out(out), _use_prev_marking(use_prev_marking), _all(all) { }
  2423 };
  2425 void ConcurrentMark::print_reachable(const char* str,
  2426                                      bool use_prev_marking,
  2427                                      bool all) {
  2428   gclog_or_tty->cr();
  2429   gclog_or_tty->print_cr("== Doing heap dump... ");
  2431   if (G1PrintReachableBaseFile == NULL) {
  2432     gclog_or_tty->print_cr("  #### error: no base file defined");
  2433     return;
  2436   if (strlen(G1PrintReachableBaseFile) + 1 + strlen(str) >
  2437       (JVM_MAXPATHLEN - 1)) {
  2438     gclog_or_tty->print_cr("  #### error: file name too long");
  2439     return;
  2442   char file_name[JVM_MAXPATHLEN];
  2443   sprintf(file_name, "%s.%s", G1PrintReachableBaseFile, str);
  2444   gclog_or_tty->print_cr("  dumping to file %s", file_name);
  2446   fileStream fout(file_name);
  2447   if (!fout.is_open()) {
  2448     gclog_or_tty->print_cr("  #### error: could not open file");
  2449     return;
  2452   outputStream* out = &fout;
  2454   CMBitMapRO* bitmap = NULL;
  2455   if (use_prev_marking) {
  2456     bitmap = _prevMarkBitMap;
  2457   } else {
  2458     bitmap = _nextMarkBitMap;
  2461   out->print_cr("-- USING %s", (use_prev_marking) ? "PTAMS" : "NTAMS");
  2462   out->cr();
  2464   out->print_cr("--- ITERATING OVER REGIONS");
  2465   out->cr();
  2466   PrintReachableRegionClosure rcl(bitmap, out, use_prev_marking, all);
  2467   _g1h->heap_region_iterate(&rcl);
  2468   out->cr();
  2470   gclog_or_tty->print_cr("  done");
  2471   gclog_or_tty->flush();
  2474 #endif // PRODUCT
  2476 // This note is for drainAllSATBBuffers and the code in between.
  2477 // In the future we could reuse a task to do this work during an
  2478 // evacuation pause (since now tasks are not active and can be claimed
  2479 // during an evacuation pause). This was a late change to the code and
  2480 // is currently not being taken advantage of.
  2482 class CMGlobalObjectClosure : public ObjectClosure {
  2483 private:
  2484   ConcurrentMark* _cm;
  2486 public:
  2487   void do_object(oop obj) {
  2488     _cm->deal_with_reference(obj);
  2491   CMGlobalObjectClosure(ConcurrentMark* cm) : _cm(cm) { }
  2492 };
  2494 void ConcurrentMark::deal_with_reference(oop obj) {
  2495   if (verbose_high())
  2496     gclog_or_tty->print_cr("[global] we're dealing with reference "PTR_FORMAT,
  2497                            (void*) obj);
  2500   HeapWord* objAddr = (HeapWord*) obj;
  2501   assert(obj->is_oop_or_null(true /* ignore mark word */), "Error");
  2502   if (_g1h->is_in_g1_reserved(objAddr)) {
  2503     assert(obj != NULL, "is_in_g1_reserved should ensure this");
  2504     HeapRegion* hr = _g1h->heap_region_containing(obj);
  2505     if (_g1h->is_obj_ill(obj, hr)) {
  2506       if (verbose_high())
  2507         gclog_or_tty->print_cr("[global] "PTR_FORMAT" is not considered "
  2508                                "marked", (void*) obj);
  2510       // we need to mark it first
  2511       if (_nextMarkBitMap->parMark(objAddr)) {
  2512         // No OrderAccess:store_load() is needed. It is implicit in the
  2513         // CAS done in parMark(objAddr) above
  2514         HeapWord* finger = _finger;
  2515         if (objAddr < finger) {
  2516           if (verbose_high())
  2517             gclog_or_tty->print_cr("[global] below the global finger "
  2518                                    "("PTR_FORMAT"), pushing it", finger);
  2519           if (!mark_stack_push(obj)) {
  2520             if (verbose_low())
  2521               gclog_or_tty->print_cr("[global] global stack overflow during "
  2522                                      "deal_with_reference");
  2530 void ConcurrentMark::drainAllSATBBuffers() {
  2531   CMGlobalObjectClosure oc(this);
  2532   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
  2533   satb_mq_set.set_closure(&oc);
  2535   while (satb_mq_set.apply_closure_to_completed_buffer()) {
  2536     if (verbose_medium())
  2537       gclog_or_tty->print_cr("[global] processed an SATB buffer");
  2540   // no need to check whether we should do this, as this is only
  2541   // called during an evacuation pause
  2542   satb_mq_set.iterate_closure_all_threads();
  2544   satb_mq_set.set_closure(NULL);
  2545   assert(satb_mq_set.completed_buffers_num() == 0, "invariant");
  2548 void ConcurrentMark::markPrev(oop p) {
  2549   // Note we are overriding the read-only view of the prev map here, via
  2550   // the cast.
  2551   ((CMBitMap*)_prevMarkBitMap)->mark((HeapWord*)p);
  2554 void ConcurrentMark::clear(oop p) {
  2555   assert(p != NULL && p->is_oop(), "expected an oop");
  2556   HeapWord* addr = (HeapWord*)p;
  2557   assert(addr >= _nextMarkBitMap->startWord() ||
  2558          addr < _nextMarkBitMap->endWord(), "in a region");
  2560   _nextMarkBitMap->clear(addr);
  2563 void ConcurrentMark::clearRangeBothMaps(MemRegion mr) {
  2564   // Note we are overriding the read-only view of the prev map here, via
  2565   // the cast.
  2566   ((CMBitMap*)_prevMarkBitMap)->clearRange(mr);
  2567   _nextMarkBitMap->clearRange(mr);
  2570 HeapRegion*
  2571 ConcurrentMark::claim_region(int task_num) {
  2572   // "checkpoint" the finger
  2573   HeapWord* finger = _finger;
  2575   // _heap_end will not change underneath our feet; it only changes at
  2576   // yield points.
  2577   while (finger < _heap_end) {
  2578     assert(_g1h->is_in_g1_reserved(finger), "invariant");
  2580     // is the gap between reading the finger and doing the CAS too long?
  2582     HeapRegion* curr_region   = _g1h->heap_region_containing(finger);
  2583     HeapWord*   bottom        = curr_region->bottom();
  2584     HeapWord*   end           = curr_region->end();
  2585     HeapWord*   limit         = curr_region->next_top_at_mark_start();
  2587     if (verbose_low())
  2588       gclog_or_tty->print_cr("[%d] curr_region = "PTR_FORMAT" "
  2589                              "["PTR_FORMAT", "PTR_FORMAT"), "
  2590                              "limit = "PTR_FORMAT,
  2591                              task_num, curr_region, bottom, end, limit);
  2593     HeapWord* res =
  2594       (HeapWord*) Atomic::cmpxchg_ptr(end, &_finger, finger);
  2595     if (res == finger) {
  2596       // we succeeded
  2598       // notice that _finger == end cannot be guaranteed here since,
  2599       // someone else might have moved the finger even further
  2600       assert(_finger >= end, "the finger should have moved forward");
  2602       if (verbose_low())
  2603         gclog_or_tty->print_cr("[%d] we were successful with region = "
  2604                                PTR_FORMAT, task_num, curr_region);
  2606       if (limit > bottom) {
  2607         if (verbose_low())
  2608           gclog_or_tty->print_cr("[%d] region "PTR_FORMAT" is not empty, "
  2609                                  "returning it ", task_num, curr_region);
  2610         return curr_region;
  2611       } else {
  2612         assert(limit == bottom,
  2613                "the region limit should be at bottom");
  2614         if (verbose_low())
  2615           gclog_or_tty->print_cr("[%d] region "PTR_FORMAT" is empty, "
  2616                                  "returning NULL", task_num, curr_region);
  2617         // we return NULL and the caller should try calling
  2618         // claim_region() again.
  2619         return NULL;
  2621     } else {
  2622       assert(_finger > finger, "the finger should have moved forward");
  2623       if (verbose_low())
  2624         gclog_or_tty->print_cr("[%d] somebody else moved the finger, "
  2625                                "global finger = "PTR_FORMAT", "
  2626                                "our finger = "PTR_FORMAT,
  2627                                task_num, _finger, finger);
  2629       // read it again
  2630       finger = _finger;
  2634   return NULL;
  2637 bool ConcurrentMark::invalidate_aborted_regions_in_cset() {
  2638   bool result = false;
  2639   for (int i = 0; i < (int)_max_task_num; ++i) {
  2640     CMTask* the_task = _tasks[i];
  2641     MemRegion mr = the_task->aborted_region();
  2642     if (mr.start() != NULL) {
  2643       assert(mr.end() != NULL, "invariant");
  2644       assert(mr.word_size() > 0, "invariant");
  2645       HeapRegion* hr = _g1h->heap_region_containing(mr.start());
  2646       assert(hr != NULL, "invariant");
  2647       if (hr->in_collection_set()) {
  2648         // The region points into the collection set
  2649         the_task->set_aborted_region(MemRegion());
  2650         result = true;
  2654   return result;
  2657 bool ConcurrentMark::has_aborted_regions() {
  2658   for (int i = 0; i < (int)_max_task_num; ++i) {
  2659     CMTask* the_task = _tasks[i];
  2660     MemRegion mr = the_task->aborted_region();
  2661     if (mr.start() != NULL) {
  2662       assert(mr.end() != NULL, "invariant");
  2663       assert(mr.word_size() > 0, "invariant");
  2664       return true;
  2667   return false;
  2670 void ConcurrentMark::oops_do(OopClosure* cl) {
  2671   if (_markStack.size() > 0 && verbose_low())
  2672     gclog_or_tty->print_cr("[global] scanning the global marking stack, "
  2673                            "size = %d", _markStack.size());
  2674   // we first iterate over the contents of the mark stack...
  2675   _markStack.oops_do(cl);
  2677   for (int i = 0; i < (int)_max_task_num; ++i) {
  2678     OopTaskQueue* queue = _task_queues->queue((int)i);
  2680     if (queue->size() > 0 && verbose_low())
  2681       gclog_or_tty->print_cr("[global] scanning task queue of task %d, "
  2682                              "size = %d", i, queue->size());
  2684     // ...then over the contents of the all the task queues.
  2685     queue->oops_do(cl);
  2688   // Invalidate any entries, that are in the region stack, that
  2689   // point into the collection set
  2690   if (_regionStack.invalidate_entries_into_cset()) {
  2691     // otherwise, any gray objects copied during the evacuation pause
  2692     // might not be visited.
  2693     assert(_should_gray_objects, "invariant");
  2696   // Invalidate any aborted regions, recorded in the individual CM
  2697   // tasks, that point into the collection set.
  2698   if (invalidate_aborted_regions_in_cset()) {
  2699     // otherwise, any gray objects copied during the evacuation pause
  2700     // might not be visited.
  2701     assert(_should_gray_objects, "invariant");
  2706 void ConcurrentMark::clear_marking_state() {
  2707   _markStack.setEmpty();
  2708   _markStack.clear_overflow();
  2709   _regionStack.setEmpty();
  2710   _regionStack.clear_overflow();
  2711   clear_has_overflown();
  2712   _finger = _heap_start;
  2714   for (int i = 0; i < (int)_max_task_num; ++i) {
  2715     OopTaskQueue* queue = _task_queues->queue(i);
  2716     queue->set_empty();
  2717     // Clear any partial regions from the CMTasks
  2718     _tasks[i]->clear_aborted_region();
  2722 void ConcurrentMark::print_stats() {
  2723   if (verbose_stats()) {
  2724     gclog_or_tty->print_cr("---------------------------------------------------------------------");
  2725     for (size_t i = 0; i < _active_tasks; ++i) {
  2726       _tasks[i]->print_stats();
  2727       gclog_or_tty->print_cr("---------------------------------------------------------------------");
  2732 class CSMarkOopClosure: public OopClosure {
  2733   friend class CSMarkBitMapClosure;
  2735   G1CollectedHeap* _g1h;
  2736   CMBitMap*        _bm;
  2737   ConcurrentMark*  _cm;
  2738   oop*             _ms;
  2739   jint*            _array_ind_stack;
  2740   int              _ms_size;
  2741   int              _ms_ind;
  2742   int              _array_increment;
  2744   bool push(oop obj, int arr_ind = 0) {
  2745     if (_ms_ind == _ms_size) {
  2746       gclog_or_tty->print_cr("Mark stack is full.");
  2747       return false;
  2749     _ms[_ms_ind] = obj;
  2750     if (obj->is_objArray()) _array_ind_stack[_ms_ind] = arr_ind;
  2751     _ms_ind++;
  2752     return true;
  2755   oop pop() {
  2756     if (_ms_ind == 0) return NULL;
  2757     else {
  2758       _ms_ind--;
  2759       return _ms[_ms_ind];
  2763   template <class T> bool drain() {
  2764     while (_ms_ind > 0) {
  2765       oop obj = pop();
  2766       assert(obj != NULL, "Since index was non-zero.");
  2767       if (obj->is_objArray()) {
  2768         jint arr_ind = _array_ind_stack[_ms_ind];
  2769         objArrayOop aobj = objArrayOop(obj);
  2770         jint len = aobj->length();
  2771         jint next_arr_ind = arr_ind + _array_increment;
  2772         if (next_arr_ind < len) {
  2773           push(obj, next_arr_ind);
  2775         // Now process this portion of this one.
  2776         int lim = MIN2(next_arr_ind, len);
  2777         for (int j = arr_ind; j < lim; j++) {
  2778           do_oop(aobj->objArrayOopDesc::obj_at_addr<T>(j));
  2781       } else {
  2782         obj->oop_iterate(this);
  2784       if (abort()) return false;
  2786     return true;
  2789 public:
  2790   CSMarkOopClosure(ConcurrentMark* cm, int ms_size) :
  2791     _g1h(G1CollectedHeap::heap()),
  2792     _cm(cm),
  2793     _bm(cm->nextMarkBitMap()),
  2794     _ms_size(ms_size), _ms_ind(0),
  2795     _ms(NEW_C_HEAP_ARRAY(oop, ms_size)),
  2796     _array_ind_stack(NEW_C_HEAP_ARRAY(jint, ms_size)),
  2797     _array_increment(MAX2(ms_size/8, 16))
  2798   {}
  2800   ~CSMarkOopClosure() {
  2801     FREE_C_HEAP_ARRAY(oop, _ms);
  2802     FREE_C_HEAP_ARRAY(jint, _array_ind_stack);
  2805   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  2806   virtual void do_oop(      oop* p) { do_oop_work(p); }
  2808   template <class T> void do_oop_work(T* p) {
  2809     T heap_oop = oopDesc::load_heap_oop(p);
  2810     if (oopDesc::is_null(heap_oop)) return;
  2811     oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
  2812     if (obj->is_forwarded()) {
  2813       // If the object has already been forwarded, we have to make sure
  2814       // that it's marked.  So follow the forwarding pointer.  Note that
  2815       // this does the right thing for self-forwarding pointers in the
  2816       // evacuation failure case.
  2817       obj = obj->forwardee();
  2819     HeapRegion* hr = _g1h->heap_region_containing(obj);
  2820     if (hr != NULL) {
  2821       if (hr->in_collection_set()) {
  2822         if (_g1h->is_obj_ill(obj)) {
  2823           _bm->mark((HeapWord*)obj);
  2824           if (!push(obj)) {
  2825             gclog_or_tty->print_cr("Setting abort in CSMarkOopClosure because push failed.");
  2826             set_abort();
  2829       } else {
  2830         // Outside the collection set; we need to gray it
  2831         _cm->deal_with_reference(obj);
  2835 };
  2837 class CSMarkBitMapClosure: public BitMapClosure {
  2838   G1CollectedHeap* _g1h;
  2839   CMBitMap*        _bitMap;
  2840   ConcurrentMark*  _cm;
  2841   CSMarkOopClosure _oop_cl;
  2842 public:
  2843   CSMarkBitMapClosure(ConcurrentMark* cm, int ms_size) :
  2844     _g1h(G1CollectedHeap::heap()),
  2845     _bitMap(cm->nextMarkBitMap()),
  2846     _oop_cl(cm, ms_size)
  2847   {}
  2849   ~CSMarkBitMapClosure() {}
  2851   bool do_bit(size_t offset) {
  2852     // convert offset into a HeapWord*
  2853     HeapWord* addr = _bitMap->offsetToHeapWord(offset);
  2854     assert(_bitMap->endWord() && addr < _bitMap->endWord(),
  2855            "address out of range");
  2856     assert(_bitMap->isMarked(addr), "tautology");
  2857     oop obj = oop(addr);
  2858     if (!obj->is_forwarded()) {
  2859       if (!_oop_cl.push(obj)) return false;
  2860       if (UseCompressedOops) {
  2861         if (!_oop_cl.drain<narrowOop>()) return false;
  2862       } else {
  2863         if (!_oop_cl.drain<oop>()) return false;
  2866     // Otherwise...
  2867     return true;
  2869 };
  2872 class CompleteMarkingInCSHRClosure: public HeapRegionClosure {
  2873   CMBitMap* _bm;
  2874   CSMarkBitMapClosure _bit_cl;
  2875   enum SomePrivateConstants {
  2876     MSSize = 1000
  2877   };
  2878   bool _completed;
  2879 public:
  2880   CompleteMarkingInCSHRClosure(ConcurrentMark* cm) :
  2881     _bm(cm->nextMarkBitMap()),
  2882     _bit_cl(cm, MSSize),
  2883     _completed(true)
  2884   {}
  2886   ~CompleteMarkingInCSHRClosure() {}
  2888   bool doHeapRegion(HeapRegion* r) {
  2889     if (!r->evacuation_failed()) {
  2890       MemRegion mr = MemRegion(r->bottom(), r->next_top_at_mark_start());
  2891       if (!mr.is_empty()) {
  2892         if (!_bm->iterate(&_bit_cl, mr)) {
  2893           _completed = false;
  2894           return true;
  2898     return false;
  2901   bool completed() { return _completed; }
  2902 };
  2904 class ClearMarksInHRClosure: public HeapRegionClosure {
  2905   CMBitMap* _bm;
  2906 public:
  2907   ClearMarksInHRClosure(CMBitMap* bm): _bm(bm) { }
  2909   bool doHeapRegion(HeapRegion* r) {
  2910     if (!r->used_region().is_empty() && !r->evacuation_failed()) {
  2911       MemRegion usedMR = r->used_region();
  2912       _bm->clearRange(r->used_region());
  2914     return false;
  2916 };
  2918 void ConcurrentMark::complete_marking_in_collection_set() {
  2919   G1CollectedHeap* g1h =  G1CollectedHeap::heap();
  2921   if (!g1h->mark_in_progress()) {
  2922     g1h->g1_policy()->record_mark_closure_time(0.0);
  2923     return;
  2926   int i = 1;
  2927   double start = os::elapsedTime();
  2928   while (true) {
  2929     i++;
  2930     CompleteMarkingInCSHRClosure cmplt(this);
  2931     g1h->collection_set_iterate(&cmplt);
  2932     if (cmplt.completed()) break;
  2934   double end_time = os::elapsedTime();
  2935   double elapsed_time_ms = (end_time - start) * 1000.0;
  2936   g1h->g1_policy()->record_mark_closure_time(elapsed_time_ms);
  2938   ClearMarksInHRClosure clr(nextMarkBitMap());
  2939   g1h->collection_set_iterate(&clr);
  2942 // The next two methods deal with the following optimisation. Some
  2943 // objects are gray by being marked and located above the finger. If
  2944 // they are copied, during an evacuation pause, below the finger then
  2945 // the need to be pushed on the stack. The observation is that, if
  2946 // there are no regions in the collection set located above the
  2947 // finger, then the above cannot happen, hence we do not need to
  2948 // explicitly gray any objects when copying them to below the
  2949 // finger. The global stack will be scanned to ensure that, if it
  2950 // points to objects being copied, it will update their
  2951 // location. There is a tricky situation with the gray objects in
  2952 // region stack that are being coped, however. See the comment in
  2953 // newCSet().
  2955 void ConcurrentMark::newCSet() {
  2956   if (!concurrent_marking_in_progress())
  2957     // nothing to do if marking is not in progress
  2958     return;
  2960   // find what the lowest finger is among the global and local fingers
  2961   _min_finger = _finger;
  2962   for (int i = 0; i < (int)_max_task_num; ++i) {
  2963     CMTask* task = _tasks[i];
  2964     HeapWord* task_finger = task->finger();
  2965     if (task_finger != NULL && task_finger < _min_finger)
  2966       _min_finger = task_finger;
  2969   _should_gray_objects = false;
  2971   // This fixes a very subtle and fustrating bug. It might be the case
  2972   // that, during en evacuation pause, heap regions that contain
  2973   // objects that are gray (by being in regions contained in the
  2974   // region stack) are included in the collection set. Since such gray
  2975   // objects will be moved, and because it's not easy to redirect
  2976   // region stack entries to point to a new location (because objects
  2977   // in one region might be scattered to multiple regions after they
  2978   // are copied), one option is to ensure that all marked objects
  2979   // copied during a pause are pushed on the stack. Notice, however,
  2980   // that this problem can only happen when the region stack is not
  2981   // empty during an evacuation pause. So, we make the fix a bit less
  2982   // conservative and ensure that regions are pushed on the stack,
  2983   // irrespective whether all collection set regions are below the
  2984   // finger, if the region stack is not empty. This is expected to be
  2985   // a rare case, so I don't think it's necessary to be smarted about it.
  2986   if (!region_stack_empty() || has_aborted_regions())
  2987     _should_gray_objects = true;
  2990 void ConcurrentMark::registerCSetRegion(HeapRegion* hr) {
  2991   if (!concurrent_marking_in_progress())
  2992     return;
  2994   HeapWord* region_end = hr->end();
  2995   if (region_end > _min_finger)
  2996     _should_gray_objects = true;
  2999 // abandon current marking iteration due to a Full GC
  3000 void ConcurrentMark::abort() {
  3001   // Clear all marks to force marking thread to do nothing
  3002   _nextMarkBitMap->clearAll();
  3003   // Empty mark stack
  3004   clear_marking_state();
  3005   for (int i = 0; i < (int)_max_task_num; ++i) {
  3006     _tasks[i]->clear_region_fields();
  3008   _has_aborted = true;
  3010   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
  3011   satb_mq_set.abandon_partial_marking();
  3012   // This can be called either during or outside marking, we'll read
  3013   // the expected_active value from the SATB queue set.
  3014   satb_mq_set.set_active_all_threads(
  3015                                  false, /* new active value */
  3016                                  satb_mq_set.is_active() /* expected_active */);
  3019 static void print_ms_time_info(const char* prefix, const char* name,
  3020                                NumberSeq& ns) {
  3021   gclog_or_tty->print_cr("%s%5d %12s: total time = %8.2f s (avg = %8.2f ms).",
  3022                          prefix, ns.num(), name, ns.sum()/1000.0, ns.avg());
  3023   if (ns.num() > 0) {
  3024     gclog_or_tty->print_cr("%s         [std. dev = %8.2f ms, max = %8.2f ms]",
  3025                            prefix, ns.sd(), ns.maximum());
  3029 void ConcurrentMark::print_summary_info() {
  3030   gclog_or_tty->print_cr(" Concurrent marking:");
  3031   print_ms_time_info("  ", "init marks", _init_times);
  3032   print_ms_time_info("  ", "remarks", _remark_times);
  3034     print_ms_time_info("     ", "final marks", _remark_mark_times);
  3035     print_ms_time_info("     ", "weak refs", _remark_weak_ref_times);
  3038   print_ms_time_info("  ", "cleanups", _cleanup_times);
  3039   gclog_or_tty->print_cr("    Final counting total time = %8.2f s (avg = %8.2f ms).",
  3040                          _total_counting_time,
  3041                          (_cleanup_times.num() > 0 ? _total_counting_time * 1000.0 /
  3042                           (double)_cleanup_times.num()
  3043                          : 0.0));
  3044   if (G1ScrubRemSets) {
  3045     gclog_or_tty->print_cr("    RS scrub total time = %8.2f s (avg = %8.2f ms).",
  3046                            _total_rs_scrub_time,
  3047                            (_cleanup_times.num() > 0 ? _total_rs_scrub_time * 1000.0 /
  3048                             (double)_cleanup_times.num()
  3049                            : 0.0));
  3051   gclog_or_tty->print_cr("  Total stop_world time = %8.2f s.",
  3052                          (_init_times.sum() + _remark_times.sum() +
  3053                           _cleanup_times.sum())/1000.0);
  3054   gclog_or_tty->print_cr("  Total concurrent time = %8.2f s "
  3055                 "(%8.2f s marking, %8.2f s counting).",
  3056                 cmThread()->vtime_accum(),
  3057                 cmThread()->vtime_mark_accum(),
  3058                 cmThread()->vtime_count_accum());
  3061 void ConcurrentMark::print_worker_threads_on(outputStream* st) const {
  3062   _parallel_workers->print_worker_threads_on(st);
  3065 // Closures
  3066 // XXX: there seems to be a lot of code  duplication here;
  3067 // should refactor and consolidate the shared code.
  3069 // This closure is used to mark refs into the CMS generation in
  3070 // the CMS bit map. Called at the first checkpoint.
  3072 // We take a break if someone is trying to stop the world.
  3073 bool ConcurrentMark::do_yield_check(int worker_i) {
  3074   if (should_yield()) {
  3075     if (worker_i == 0)
  3076       _g1h->g1_policy()->record_concurrent_pause();
  3077     cmThread()->yield();
  3078     if (worker_i == 0)
  3079       _g1h->g1_policy()->record_concurrent_pause_end();
  3080     return true;
  3081   } else {
  3082     return false;
  3086 bool ConcurrentMark::should_yield() {
  3087   return cmThread()->should_yield();
  3090 bool ConcurrentMark::containing_card_is_marked(void* p) {
  3091   size_t offset = pointer_delta(p, _g1h->reserved_region().start(), 1);
  3092   return _card_bm.at(offset >> CardTableModRefBS::card_shift);
  3095 bool ConcurrentMark::containing_cards_are_marked(void* start,
  3096                                                  void* last) {
  3097   return
  3098     containing_card_is_marked(start) &&
  3099     containing_card_is_marked(last);
  3102 #ifndef PRODUCT
  3103 // for debugging purposes
  3104 void ConcurrentMark::print_finger() {
  3105   gclog_or_tty->print_cr("heap ["PTR_FORMAT", "PTR_FORMAT"), global finger = "PTR_FORMAT,
  3106                          _heap_start, _heap_end, _finger);
  3107   for (int i = 0; i < (int) _max_task_num; ++i) {
  3108     gclog_or_tty->print("   %d: "PTR_FORMAT, i, _tasks[i]->finger());
  3110   gclog_or_tty->print_cr("");
  3112 #endif
  3114 // Closure for iteration over bitmaps
  3115 class CMBitMapClosure : public BitMapClosure {
  3116 private:
  3117   // the bitmap that is being iterated over
  3118   CMBitMap*                   _nextMarkBitMap;
  3119   ConcurrentMark*             _cm;
  3120   CMTask*                     _task;
  3121   // true if we're scanning a heap region claimed by the task (so that
  3122   // we move the finger along), false if we're not, i.e. currently when
  3123   // scanning a heap region popped from the region stack (so that we
  3124   // do not move the task finger along; it'd be a mistake if we did so).
  3125   bool                        _scanning_heap_region;
  3127 public:
  3128   CMBitMapClosure(CMTask *task,
  3129                   ConcurrentMark* cm,
  3130                   CMBitMap* nextMarkBitMap)
  3131     :  _task(task), _cm(cm), _nextMarkBitMap(nextMarkBitMap) { }
  3133   void set_scanning_heap_region(bool scanning_heap_region) {
  3134     _scanning_heap_region = scanning_heap_region;
  3137   bool do_bit(size_t offset) {
  3138     HeapWord* addr = _nextMarkBitMap->offsetToHeapWord(offset);
  3139     assert(_nextMarkBitMap->isMarked(addr), "invariant");
  3140     assert( addr < _cm->finger(), "invariant");
  3142     if (_scanning_heap_region) {
  3143       statsOnly( _task->increase_objs_found_on_bitmap() );
  3144       assert(addr >= _task->finger(), "invariant");
  3145       // We move that task's local finger along.
  3146       _task->move_finger_to(addr);
  3147     } else {
  3148       // We move the task's region finger along.
  3149       _task->move_region_finger_to(addr);
  3152     _task->scan_object(oop(addr));
  3153     // we only partially drain the local queue and global stack
  3154     _task->drain_local_queue(true);
  3155     _task->drain_global_stack(true);
  3157     // if the has_aborted flag has been raised, we need to bail out of
  3158     // the iteration
  3159     return !_task->has_aborted();
  3161 };
  3163 // Closure for iterating over objects, currently only used for
  3164 // processing SATB buffers.
  3165 class CMObjectClosure : public ObjectClosure {
  3166 private:
  3167   CMTask* _task;
  3169 public:
  3170   void do_object(oop obj) {
  3171     _task->deal_with_reference(obj);
  3174   CMObjectClosure(CMTask* task) : _task(task) { }
  3175 };
  3177 // Closure for iterating over object fields
  3178 class CMOopClosure : public OopClosure {
  3179 private:
  3180   G1CollectedHeap*   _g1h;
  3181   ConcurrentMark*    _cm;
  3182   CMTask*            _task;
  3184 public:
  3185   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  3186   virtual void do_oop(      oop* p) { do_oop_work(p); }
  3188   template <class T> void do_oop_work(T* p) {
  3189     assert( _g1h->is_in_g1_reserved((HeapWord*) p), "invariant");
  3190     assert(!_g1h->is_on_master_free_list(
  3191                     _g1h->heap_region_containing((HeapWord*) p)), "invariant");
  3193     oop obj = oopDesc::load_decode_heap_oop(p);
  3194     if (_cm->verbose_high())
  3195       gclog_or_tty->print_cr("[%d] we're looking at location "
  3196                              "*"PTR_FORMAT" = "PTR_FORMAT,
  3197                              _task->task_id(), p, (void*) obj);
  3198     _task->deal_with_reference(obj);
  3201   CMOopClosure(G1CollectedHeap* g1h,
  3202                ConcurrentMark* cm,
  3203                CMTask* task)
  3204     : _g1h(g1h), _cm(cm), _task(task)
  3206     assert(_ref_processor == NULL, "should be initialized to NULL");
  3208     if (G1UseConcMarkReferenceProcessing) {
  3209       _ref_processor = g1h->ref_processor();
  3210       assert(_ref_processor != NULL, "should not be NULL");
  3213 };
  3215 void CMTask::setup_for_region(HeapRegion* hr) {
  3216   // Separated the asserts so that we know which one fires.
  3217   assert(hr != NULL,
  3218         "claim_region() should have filtered out continues humongous regions");
  3219   assert(!hr->continuesHumongous(),
  3220         "claim_region() should have filtered out continues humongous regions");
  3222   if (_cm->verbose_low())
  3223     gclog_or_tty->print_cr("[%d] setting up for region "PTR_FORMAT,
  3224                            _task_id, hr);
  3226   _curr_region  = hr;
  3227   _finger       = hr->bottom();
  3228   update_region_limit();
  3231 void CMTask::update_region_limit() {
  3232   HeapRegion* hr            = _curr_region;
  3233   HeapWord* bottom          = hr->bottom();
  3234   HeapWord* limit           = hr->next_top_at_mark_start();
  3236   if (limit == bottom) {
  3237     if (_cm->verbose_low())
  3238       gclog_or_tty->print_cr("[%d] found an empty region "
  3239                              "["PTR_FORMAT", "PTR_FORMAT")",
  3240                              _task_id, bottom, limit);
  3241     // The region was collected underneath our feet.
  3242     // We set the finger to bottom to ensure that the bitmap
  3243     // iteration that will follow this will not do anything.
  3244     // (this is not a condition that holds when we set the region up,
  3245     // as the region is not supposed to be empty in the first place)
  3246     _finger = bottom;
  3247   } else if (limit >= _region_limit) {
  3248     assert(limit >= _finger, "peace of mind");
  3249   } else {
  3250     assert(limit < _region_limit, "only way to get here");
  3251     // This can happen under some pretty unusual circumstances.  An
  3252     // evacuation pause empties the region underneath our feet (NTAMS
  3253     // at bottom). We then do some allocation in the region (NTAMS
  3254     // stays at bottom), followed by the region being used as a GC
  3255     // alloc region (NTAMS will move to top() and the objects
  3256     // originally below it will be grayed). All objects now marked in
  3257     // the region are explicitly grayed, if below the global finger,
  3258     // and we do not need in fact to scan anything else. So, we simply
  3259     // set _finger to be limit to ensure that the bitmap iteration
  3260     // doesn't do anything.
  3261     _finger = limit;
  3264   _region_limit = limit;
  3267 void CMTask::giveup_current_region() {
  3268   assert(_curr_region != NULL, "invariant");
  3269   if (_cm->verbose_low())
  3270     gclog_or_tty->print_cr("[%d] giving up region "PTR_FORMAT,
  3271                            _task_id, _curr_region);
  3272   clear_region_fields();
  3275 void CMTask::clear_region_fields() {
  3276   // Values for these three fields that indicate that we're not
  3277   // holding on to a region.
  3278   _curr_region   = NULL;
  3279   _finger        = NULL;
  3280   _region_limit  = NULL;
  3282   _region_finger = NULL;
  3285 void CMTask::reset(CMBitMap* nextMarkBitMap) {
  3286   guarantee(nextMarkBitMap != NULL, "invariant");
  3288   if (_cm->verbose_low())
  3289     gclog_or_tty->print_cr("[%d] resetting", _task_id);
  3291   _nextMarkBitMap                = nextMarkBitMap;
  3292   clear_region_fields();
  3293   assert(_aborted_region.is_empty(), "should have been cleared");
  3295   _calls                         = 0;
  3296   _elapsed_time_ms               = 0.0;
  3297   _termination_time_ms           = 0.0;
  3298   _termination_start_time_ms     = 0.0;
  3300 #if _MARKING_STATS_
  3301   _local_pushes                  = 0;
  3302   _local_pops                    = 0;
  3303   _local_max_size                = 0;
  3304   _objs_scanned                  = 0;
  3305   _global_pushes                 = 0;
  3306   _global_pops                   = 0;
  3307   _global_max_size               = 0;
  3308   _global_transfers_to           = 0;
  3309   _global_transfers_from         = 0;
  3310   _region_stack_pops             = 0;
  3311   _regions_claimed               = 0;
  3312   _objs_found_on_bitmap          = 0;
  3313   _satb_buffers_processed        = 0;
  3314   _steal_attempts                = 0;
  3315   _steals                        = 0;
  3316   _aborted                       = 0;
  3317   _aborted_overflow              = 0;
  3318   _aborted_cm_aborted            = 0;
  3319   _aborted_yield                 = 0;
  3320   _aborted_timed_out             = 0;
  3321   _aborted_satb                  = 0;
  3322   _aborted_termination           = 0;
  3323 #endif // _MARKING_STATS_
  3326 bool CMTask::should_exit_termination() {
  3327   regular_clock_call();
  3328   // This is called when we are in the termination protocol. We should
  3329   // quit if, for some reason, this task wants to abort or the global
  3330   // stack is not empty (this means that we can get work from it).
  3331   return !_cm->mark_stack_empty() || has_aborted();
  3334 // This determines whether the method below will check both the local
  3335 // and global fingers when determining whether to push on the stack a
  3336 // gray object (value 1) or whether it will only check the global one
  3337 // (value 0). The tradeoffs are that the former will be a bit more
  3338 // accurate and possibly push less on the stack, but it might also be
  3339 // a little bit slower.
  3341 #define _CHECK_BOTH_FINGERS_      1
  3343 void CMTask::deal_with_reference(oop obj) {
  3344   if (_cm->verbose_high())
  3345     gclog_or_tty->print_cr("[%d] we're dealing with reference = "PTR_FORMAT,
  3346                            _task_id, (void*) obj);
  3348   ++_refs_reached;
  3350   HeapWord* objAddr = (HeapWord*) obj;
  3351   assert(obj->is_oop_or_null(true /* ignore mark word */), "Error");
  3352   if (_g1h->is_in_g1_reserved(objAddr)) {
  3353     assert(obj != NULL, "is_in_g1_reserved should ensure this");
  3354     HeapRegion* hr =  _g1h->heap_region_containing(obj);
  3355     if (_g1h->is_obj_ill(obj, hr)) {
  3356       if (_cm->verbose_high())
  3357         gclog_or_tty->print_cr("[%d] "PTR_FORMAT" is not considered marked",
  3358                                _task_id, (void*) obj);
  3360       // we need to mark it first
  3361       if (_nextMarkBitMap->parMark(objAddr)) {
  3362         // No OrderAccess:store_load() is needed. It is implicit in the
  3363         // CAS done in parMark(objAddr) above
  3364         HeapWord* global_finger = _cm->finger();
  3366 #if _CHECK_BOTH_FINGERS_
  3367         // we will check both the local and global fingers
  3369         if (_finger != NULL && objAddr < _finger) {
  3370           if (_cm->verbose_high())
  3371             gclog_or_tty->print_cr("[%d] below the local finger ("PTR_FORMAT"), "
  3372                                    "pushing it", _task_id, _finger);
  3373           push(obj);
  3374         } else if (_curr_region != NULL && objAddr < _region_limit) {
  3375           // do nothing
  3376         } else if (objAddr < global_finger) {
  3377           // Notice that the global finger might be moving forward
  3378           // concurrently. This is not a problem. In the worst case, we
  3379           // mark the object while it is above the global finger and, by
  3380           // the time we read the global finger, it has moved forward
  3381           // passed this object. In this case, the object will probably
  3382           // be visited when a task is scanning the region and will also
  3383           // be pushed on the stack. So, some duplicate work, but no
  3384           // correctness problems.
  3386           if (_cm->verbose_high())
  3387             gclog_or_tty->print_cr("[%d] below the global finger "
  3388                                    "("PTR_FORMAT"), pushing it",
  3389                                    _task_id, global_finger);
  3390           push(obj);
  3391         } else {
  3392           // do nothing
  3394 #else // _CHECK_BOTH_FINGERS_
  3395         // we will only check the global finger
  3397         if (objAddr < global_finger) {
  3398           // see long comment above
  3400           if (_cm->verbose_high())
  3401             gclog_or_tty->print_cr("[%d] below the global finger "
  3402                                    "("PTR_FORMAT"), pushing it",
  3403                                    _task_id, global_finger);
  3404           push(obj);
  3406 #endif // _CHECK_BOTH_FINGERS_
  3412 void CMTask::push(oop obj) {
  3413   HeapWord* objAddr = (HeapWord*) obj;
  3414   assert(_g1h->is_in_g1_reserved(objAddr), "invariant");
  3415   assert(!_g1h->is_on_master_free_list(
  3416               _g1h->heap_region_containing((HeapWord*) objAddr)), "invariant");
  3417   assert(!_g1h->is_obj_ill(obj), "invariant");
  3418   assert(_nextMarkBitMap->isMarked(objAddr), "invariant");
  3420   if (_cm->verbose_high())
  3421     gclog_or_tty->print_cr("[%d] pushing "PTR_FORMAT, _task_id, (void*) obj);
  3423   if (!_task_queue->push(obj)) {
  3424     // The local task queue looks full. We need to push some entries
  3425     // to the global stack.
  3427     if (_cm->verbose_medium())
  3428       gclog_or_tty->print_cr("[%d] task queue overflow, "
  3429                              "moving entries to the global stack",
  3430                              _task_id);
  3431     move_entries_to_global_stack();
  3433     // this should succeed since, even if we overflow the global
  3434     // stack, we should have definitely removed some entries from the
  3435     // local queue. So, there must be space on it.
  3436     bool success = _task_queue->push(obj);
  3437     assert(success, "invariant");
  3440   statsOnly( int tmp_size = _task_queue->size();
  3441              if (tmp_size > _local_max_size)
  3442                _local_max_size = tmp_size;
  3443              ++_local_pushes );
  3446 void CMTask::reached_limit() {
  3447   assert(_words_scanned >= _words_scanned_limit ||
  3448          _refs_reached >= _refs_reached_limit ,
  3449          "shouldn't have been called otherwise");
  3450   regular_clock_call();
  3453 void CMTask::regular_clock_call() {
  3454   if (has_aborted())
  3455     return;
  3457   // First, we need to recalculate the words scanned and refs reached
  3458   // limits for the next clock call.
  3459   recalculate_limits();
  3461   // During the regular clock call we do the following
  3463   // (1) If an overflow has been flagged, then we abort.
  3464   if (_cm->has_overflown()) {
  3465     set_has_aborted();
  3466     return;
  3469   // If we are not concurrent (i.e. we're doing remark) we don't need
  3470   // to check anything else. The other steps are only needed during
  3471   // the concurrent marking phase.
  3472   if (!concurrent())
  3473     return;
  3475   // (2) If marking has been aborted for Full GC, then we also abort.
  3476   if (_cm->has_aborted()) {
  3477     set_has_aborted();
  3478     statsOnly( ++_aborted_cm_aborted );
  3479     return;
  3482   double curr_time_ms = os::elapsedVTime() * 1000.0;
  3484   // (3) If marking stats are enabled, then we update the step history.
  3485 #if _MARKING_STATS_
  3486   if (_words_scanned >= _words_scanned_limit)
  3487     ++_clock_due_to_scanning;
  3488   if (_refs_reached >= _refs_reached_limit)
  3489     ++_clock_due_to_marking;
  3491   double last_interval_ms = curr_time_ms - _interval_start_time_ms;
  3492   _interval_start_time_ms = curr_time_ms;
  3493   _all_clock_intervals_ms.add(last_interval_ms);
  3495   if (_cm->verbose_medium()) {
  3496     gclog_or_tty->print_cr("[%d] regular clock, interval = %1.2lfms, "
  3497                            "scanned = %d%s, refs reached = %d%s",
  3498                            _task_id, last_interval_ms,
  3499                            _words_scanned,
  3500                            (_words_scanned >= _words_scanned_limit) ? " (*)" : "",
  3501                            _refs_reached,
  3502                            (_refs_reached >= _refs_reached_limit) ? " (*)" : "");
  3504 #endif // _MARKING_STATS_
  3506   // (4) We check whether we should yield. If we have to, then we abort.
  3507   if (_cm->should_yield()) {
  3508     // We should yield. To do this we abort the task. The caller is
  3509     // responsible for yielding.
  3510     set_has_aborted();
  3511     statsOnly( ++_aborted_yield );
  3512     return;
  3515   // (5) We check whether we've reached our time quota. If we have,
  3516   // then we abort.
  3517   double elapsed_time_ms = curr_time_ms - _start_time_ms;
  3518   if (elapsed_time_ms > _time_target_ms) {
  3519     set_has_aborted();
  3520     _has_timed_out = true;
  3521     statsOnly( ++_aborted_timed_out );
  3522     return;
  3525   // (6) Finally, we check whether there are enough completed STAB
  3526   // buffers available for processing. If there are, we abort.
  3527   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
  3528   if (!_draining_satb_buffers && satb_mq_set.process_completed_buffers()) {
  3529     if (_cm->verbose_low())
  3530       gclog_or_tty->print_cr("[%d] aborting to deal with pending SATB buffers",
  3531                              _task_id);
  3532     // we do need to process SATB buffers, we'll abort and restart
  3533     // the marking task to do so
  3534     set_has_aborted();
  3535     statsOnly( ++_aborted_satb );
  3536     return;
  3540 void CMTask::recalculate_limits() {
  3541   _real_words_scanned_limit = _words_scanned + words_scanned_period;
  3542   _words_scanned_limit      = _real_words_scanned_limit;
  3544   _real_refs_reached_limit  = _refs_reached  + refs_reached_period;
  3545   _refs_reached_limit       = _real_refs_reached_limit;
  3548 void CMTask::decrease_limits() {
  3549   // This is called when we believe that we're going to do an infrequent
  3550   // operation which will increase the per byte scanned cost (i.e. move
  3551   // entries to/from the global stack). It basically tries to decrease the
  3552   // scanning limit so that the clock is called earlier.
  3554   if (_cm->verbose_medium())
  3555     gclog_or_tty->print_cr("[%d] decreasing limits", _task_id);
  3557   _words_scanned_limit = _real_words_scanned_limit -
  3558     3 * words_scanned_period / 4;
  3559   _refs_reached_limit  = _real_refs_reached_limit -
  3560     3 * refs_reached_period / 4;
  3563 void CMTask::move_entries_to_global_stack() {
  3564   // local array where we'll store the entries that will be popped
  3565   // from the local queue
  3566   oop buffer[global_stack_transfer_size];
  3568   int n = 0;
  3569   oop obj;
  3570   while (n < global_stack_transfer_size && _task_queue->pop_local(obj)) {
  3571     buffer[n] = obj;
  3572     ++n;
  3575   if (n > 0) {
  3576     // we popped at least one entry from the local queue
  3578     statsOnly( ++_global_transfers_to; _local_pops += n );
  3580     if (!_cm->mark_stack_push(buffer, n)) {
  3581       if (_cm->verbose_low())
  3582         gclog_or_tty->print_cr("[%d] aborting due to global stack overflow", _task_id);
  3583       set_has_aborted();
  3584     } else {
  3585       // the transfer was successful
  3587       if (_cm->verbose_medium())
  3588         gclog_or_tty->print_cr("[%d] pushed %d entries to the global stack",
  3589                                _task_id, n);
  3590       statsOnly( int tmp_size = _cm->mark_stack_size();
  3591                  if (tmp_size > _global_max_size)
  3592                    _global_max_size = tmp_size;
  3593                  _global_pushes += n );
  3597   // this operation was quite expensive, so decrease the limits
  3598   decrease_limits();
  3601 void CMTask::get_entries_from_global_stack() {
  3602   // local array where we'll store the entries that will be popped
  3603   // from the global stack.
  3604   oop buffer[global_stack_transfer_size];
  3605   int n;
  3606   _cm->mark_stack_pop(buffer, global_stack_transfer_size, &n);
  3607   assert(n <= global_stack_transfer_size,
  3608          "we should not pop more than the given limit");
  3609   if (n > 0) {
  3610     // yes, we did actually pop at least one entry
  3612     statsOnly( ++_global_transfers_from; _global_pops += n );
  3613     if (_cm->verbose_medium())
  3614       gclog_or_tty->print_cr("[%d] popped %d entries from the global stack",
  3615                              _task_id, n);
  3616     for (int i = 0; i < n; ++i) {
  3617       bool success = _task_queue->push(buffer[i]);
  3618       // We only call this when the local queue is empty or under a
  3619       // given target limit. So, we do not expect this push to fail.
  3620       assert(success, "invariant");
  3623     statsOnly( int tmp_size = _task_queue->size();
  3624                if (tmp_size > _local_max_size)
  3625                  _local_max_size = tmp_size;
  3626                _local_pushes += n );
  3629   // this operation was quite expensive, so decrease the limits
  3630   decrease_limits();
  3633 void CMTask::drain_local_queue(bool partially) {
  3634   if (has_aborted())
  3635     return;
  3637   // Decide what the target size is, depending whether we're going to
  3638   // drain it partially (so that other tasks can steal if they run out
  3639   // of things to do) or totally (at the very end).
  3640   size_t target_size;
  3641   if (partially)
  3642     target_size = MIN2((size_t)_task_queue->max_elems()/3, GCDrainStackTargetSize);
  3643   else
  3644     target_size = 0;
  3646   if (_task_queue->size() > target_size) {
  3647     if (_cm->verbose_high())
  3648       gclog_or_tty->print_cr("[%d] draining local queue, target size = %d",
  3649                              _task_id, target_size);
  3651     oop obj;
  3652     bool ret = _task_queue->pop_local(obj);
  3653     while (ret) {
  3654       statsOnly( ++_local_pops );
  3656       if (_cm->verbose_high())
  3657         gclog_or_tty->print_cr("[%d] popped "PTR_FORMAT, _task_id,
  3658                                (void*) obj);
  3660       assert(_g1h->is_in_g1_reserved((HeapWord*) obj), "invariant" );
  3661       assert(!_g1h->is_on_master_free_list(
  3662                   _g1h->heap_region_containing((HeapWord*) obj)), "invariant");
  3664       scan_object(obj);
  3666       if (_task_queue->size() <= target_size || has_aborted())
  3667         ret = false;
  3668       else
  3669         ret = _task_queue->pop_local(obj);
  3672     if (_cm->verbose_high())
  3673       gclog_or_tty->print_cr("[%d] drained local queue, size = %d",
  3674                              _task_id, _task_queue->size());
  3678 void CMTask::drain_global_stack(bool partially) {
  3679   if (has_aborted())
  3680     return;
  3682   // We have a policy to drain the local queue before we attempt to
  3683   // drain the global stack.
  3684   assert(partially || _task_queue->size() == 0, "invariant");
  3686   // Decide what the target size is, depending whether we're going to
  3687   // drain it partially (so that other tasks can steal if they run out
  3688   // of things to do) or totally (at the very end).  Notice that,
  3689   // because we move entries from the global stack in chunks or
  3690   // because another task might be doing the same, we might in fact
  3691   // drop below the target. But, this is not a problem.
  3692   size_t target_size;
  3693   if (partially)
  3694     target_size = _cm->partial_mark_stack_size_target();
  3695   else
  3696     target_size = 0;
  3698   if (_cm->mark_stack_size() > target_size) {
  3699     if (_cm->verbose_low())
  3700       gclog_or_tty->print_cr("[%d] draining global_stack, target size %d",
  3701                              _task_id, target_size);
  3703     while (!has_aborted() && _cm->mark_stack_size() > target_size) {
  3704       get_entries_from_global_stack();
  3705       drain_local_queue(partially);
  3708     if (_cm->verbose_low())
  3709       gclog_or_tty->print_cr("[%d] drained global stack, size = %d",
  3710                              _task_id, _cm->mark_stack_size());
  3714 // SATB Queue has several assumptions on whether to call the par or
  3715 // non-par versions of the methods. this is why some of the code is
  3716 // replicated. We should really get rid of the single-threaded version
  3717 // of the code to simplify things.
  3718 void CMTask::drain_satb_buffers() {
  3719   if (has_aborted())
  3720     return;
  3722   // We set this so that the regular clock knows that we're in the
  3723   // middle of draining buffers and doesn't set the abort flag when it
  3724   // notices that SATB buffers are available for draining. It'd be
  3725   // very counter productive if it did that. :-)
  3726   _draining_satb_buffers = true;
  3728   CMObjectClosure oc(this);
  3729   SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
  3730   if (G1CollectedHeap::use_parallel_gc_threads())
  3731     satb_mq_set.set_par_closure(_task_id, &oc);
  3732   else
  3733     satb_mq_set.set_closure(&oc);
  3735   // This keeps claiming and applying the closure to completed buffers
  3736   // until we run out of buffers or we need to abort.
  3737   if (G1CollectedHeap::use_parallel_gc_threads()) {
  3738     while (!has_aborted() &&
  3739            satb_mq_set.par_apply_closure_to_completed_buffer(_task_id)) {
  3740       if (_cm->verbose_medium())
  3741         gclog_or_tty->print_cr("[%d] processed an SATB buffer", _task_id);
  3742       statsOnly( ++_satb_buffers_processed );
  3743       regular_clock_call();
  3745   } else {
  3746     while (!has_aborted() &&
  3747            satb_mq_set.apply_closure_to_completed_buffer()) {
  3748       if (_cm->verbose_medium())
  3749         gclog_or_tty->print_cr("[%d] processed an SATB buffer", _task_id);
  3750       statsOnly( ++_satb_buffers_processed );
  3751       regular_clock_call();
  3755   if (!concurrent() && !has_aborted()) {
  3756     // We should only do this during remark.
  3757     if (G1CollectedHeap::use_parallel_gc_threads())
  3758       satb_mq_set.par_iterate_closure_all_threads(_task_id);
  3759     else
  3760       satb_mq_set.iterate_closure_all_threads();
  3763   _draining_satb_buffers = false;
  3765   assert(has_aborted() ||
  3766          concurrent() ||
  3767          satb_mq_set.completed_buffers_num() == 0, "invariant");
  3769   if (G1CollectedHeap::use_parallel_gc_threads())
  3770     satb_mq_set.set_par_closure(_task_id, NULL);
  3771   else
  3772     satb_mq_set.set_closure(NULL);
  3774   // again, this was a potentially expensive operation, decrease the
  3775   // limits to get the regular clock call early
  3776   decrease_limits();
  3779 void CMTask::drain_region_stack(BitMapClosure* bc) {
  3780   if (has_aborted())
  3781     return;
  3783   assert(_region_finger == NULL,
  3784          "it should be NULL when we're not scanning a region");
  3786   if (!_cm->region_stack_empty() || !_aborted_region.is_empty()) {
  3787     if (_cm->verbose_low())
  3788       gclog_or_tty->print_cr("[%d] draining region stack, size = %d",
  3789                              _task_id, _cm->region_stack_size());
  3791     MemRegion mr;
  3793     if (!_aborted_region.is_empty()) {
  3794       mr = _aborted_region;
  3795       _aborted_region = MemRegion();
  3797       if (_cm->verbose_low())
  3798         gclog_or_tty->print_cr("[%d] scanning aborted region [ " PTR_FORMAT ", " PTR_FORMAT " )",
  3799                              _task_id, mr.start(), mr.end());
  3800     } else {
  3801       mr = _cm->region_stack_pop_lock_free();
  3802       // it returns MemRegion() if the pop fails
  3803       statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
  3806     while (mr.start() != NULL) {
  3807       if (_cm->verbose_medium())
  3808         gclog_or_tty->print_cr("[%d] we are scanning region "
  3809                                "["PTR_FORMAT", "PTR_FORMAT")",
  3810                                _task_id, mr.start(), mr.end());
  3812       assert(mr.end() <= _cm->finger(),
  3813              "otherwise the region shouldn't be on the stack");
  3814       assert(!mr.is_empty(), "Only non-empty regions live on the region stack");
  3815       if (_nextMarkBitMap->iterate(bc, mr)) {
  3816         assert(!has_aborted(),
  3817                "cannot abort the task without aborting the bitmap iteration");
  3819         // We finished iterating over the region without aborting.
  3820         regular_clock_call();
  3821         if (has_aborted())
  3822           mr = MemRegion();
  3823         else {
  3824           mr = _cm->region_stack_pop_lock_free();
  3825           // it returns MemRegion() if the pop fails
  3826           statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
  3828       } else {
  3829         assert(has_aborted(), "currently the only way to do so");
  3831         // The only way to abort the bitmap iteration is to return
  3832         // false from the do_bit() method. However, inside the
  3833         // do_bit() method we move the _region_finger to point to the
  3834         // object currently being looked at. So, if we bail out, we
  3835         // have definitely set _region_finger to something non-null.
  3836         assert(_region_finger != NULL, "invariant");
  3838         // Make sure that any previously aborted region has been
  3839         // cleared.
  3840         assert(_aborted_region.is_empty(), "aborted region not cleared");
  3842         // The iteration was actually aborted. So now _region_finger
  3843         // points to the address of the object we last scanned. If we
  3844         // leave it there, when we restart this task, we will rescan
  3845         // the object. It is easy to avoid this. We move the finger by
  3846         // enough to point to the next possible object header (the
  3847         // bitmap knows by how much we need to move it as it knows its
  3848         // granularity).
  3849         MemRegion newRegion =
  3850           MemRegion(_nextMarkBitMap->nextWord(_region_finger), mr.end());
  3852         if (!newRegion.is_empty()) {
  3853           if (_cm->verbose_low()) {
  3854             gclog_or_tty->print_cr("[%d] recording unscanned region"
  3855                                    "[" PTR_FORMAT "," PTR_FORMAT ") in CMTask",
  3856                                    _task_id,
  3857                                    newRegion.start(), newRegion.end());
  3859           // Now record the part of the region we didn't scan to
  3860           // make sure this task scans it later.
  3861           _aborted_region = newRegion;
  3863         // break from while
  3864         mr = MemRegion();
  3866       _region_finger = NULL;
  3869     if (_cm->verbose_low())
  3870       gclog_or_tty->print_cr("[%d] drained region stack, size = %d",
  3871                              _task_id, _cm->region_stack_size());
  3875 void CMTask::print_stats() {
  3876   gclog_or_tty->print_cr("Marking Stats, task = %d, calls = %d",
  3877                          _task_id, _calls);
  3878   gclog_or_tty->print_cr("  Elapsed time = %1.2lfms, Termination time = %1.2lfms",
  3879                          _elapsed_time_ms, _termination_time_ms);
  3880   gclog_or_tty->print_cr("  Step Times (cum): num = %d, avg = %1.2lfms, sd = %1.2lfms",
  3881                          _step_times_ms.num(), _step_times_ms.avg(),
  3882                          _step_times_ms.sd());
  3883   gclog_or_tty->print_cr("                    max = %1.2lfms, total = %1.2lfms",
  3884                          _step_times_ms.maximum(), _step_times_ms.sum());
  3886 #if _MARKING_STATS_
  3887   gclog_or_tty->print_cr("  Clock Intervals (cum): num = %d, avg = %1.2lfms, sd = %1.2lfms",
  3888                          _all_clock_intervals_ms.num(), _all_clock_intervals_ms.avg(),
  3889                          _all_clock_intervals_ms.sd());
  3890   gclog_or_tty->print_cr("                         max = %1.2lfms, total = %1.2lfms",
  3891                          _all_clock_intervals_ms.maximum(),
  3892                          _all_clock_intervals_ms.sum());
  3893   gclog_or_tty->print_cr("  Clock Causes (cum): scanning = %d, marking = %d",
  3894                          _clock_due_to_scanning, _clock_due_to_marking);
  3895   gclog_or_tty->print_cr("  Objects: scanned = %d, found on the bitmap = %d",
  3896                          _objs_scanned, _objs_found_on_bitmap);
  3897   gclog_or_tty->print_cr("  Local Queue:  pushes = %d, pops = %d, max size = %d",
  3898                          _local_pushes, _local_pops, _local_max_size);
  3899   gclog_or_tty->print_cr("  Global Stack: pushes = %d, pops = %d, max size = %d",
  3900                          _global_pushes, _global_pops, _global_max_size);
  3901   gclog_or_tty->print_cr("                transfers to = %d, transfers from = %d",
  3902                          _global_transfers_to,_global_transfers_from);
  3903   gclog_or_tty->print_cr("  Regions: claimed = %d, Region Stack: pops = %d",
  3904                          _regions_claimed, _region_stack_pops);
  3905   gclog_or_tty->print_cr("  SATB buffers: processed = %d", _satb_buffers_processed);
  3906   gclog_or_tty->print_cr("  Steals: attempts = %d, successes = %d",
  3907                          _steal_attempts, _steals);
  3908   gclog_or_tty->print_cr("  Aborted: %d, due to", _aborted);
  3909   gclog_or_tty->print_cr("    overflow: %d, global abort: %d, yield: %d",
  3910                          _aborted_overflow, _aborted_cm_aborted, _aborted_yield);
  3911   gclog_or_tty->print_cr("    time out: %d, SATB: %d, termination: %d",
  3912                          _aborted_timed_out, _aborted_satb, _aborted_termination);
  3913 #endif // _MARKING_STATS_
  3916 /*****************************************************************************
  3918     The do_marking_step(time_target_ms) method is the building block
  3919     of the parallel marking framework. It can be called in parallel
  3920     with other invocations of do_marking_step() on different tasks
  3921     (but only one per task, obviously) and concurrently with the
  3922     mutator threads, or during remark, hence it eliminates the need
  3923     for two versions of the code. When called during remark, it will
  3924     pick up from where the task left off during the concurrent marking
  3925     phase. Interestingly, tasks are also claimable during evacuation
  3926     pauses too, since do_marking_step() ensures that it aborts before
  3927     it needs to yield.
  3929     The data structures that is uses to do marking work are the
  3930     following:
  3932       (1) Marking Bitmap. If there are gray objects that appear only
  3933       on the bitmap (this happens either when dealing with an overflow
  3934       or when the initial marking phase has simply marked the roots
  3935       and didn't push them on the stack), then tasks claim heap
  3936       regions whose bitmap they then scan to find gray objects. A
  3937       global finger indicates where the end of the last claimed region
  3938       is. A local finger indicates how far into the region a task has
  3939       scanned. The two fingers are used to determine how to gray an
  3940       object (i.e. whether simply marking it is OK, as it will be
  3941       visited by a task in the future, or whether it needs to be also
  3942       pushed on a stack).
  3944       (2) Local Queue. The local queue of the task which is accessed
  3945       reasonably efficiently by the task. Other tasks can steal from
  3946       it when they run out of work. Throughout the marking phase, a
  3947       task attempts to keep its local queue short but not totally
  3948       empty, so that entries are available for stealing by other
  3949       tasks. Only when there is no more work, a task will totally
  3950       drain its local queue.
  3952       (3) Global Mark Stack. This handles local queue overflow. During
  3953       marking only sets of entries are moved between it and the local
  3954       queues, as access to it requires a mutex and more fine-grain
  3955       interaction with it which might cause contention. If it
  3956       overflows, then the marking phase should restart and iterate
  3957       over the bitmap to identify gray objects. Throughout the marking
  3958       phase, tasks attempt to keep the global mark stack at a small
  3959       length but not totally empty, so that entries are available for
  3960       popping by other tasks. Only when there is no more work, tasks
  3961       will totally drain the global mark stack.
  3963       (4) Global Region Stack. Entries on it correspond to areas of
  3964       the bitmap that need to be scanned since they contain gray
  3965       objects. Pushes on the region stack only happen during
  3966       evacuation pauses and typically correspond to areas covered by
  3967       GC LABS. If it overflows, then the marking phase should restart
  3968       and iterate over the bitmap to identify gray objects. Tasks will
  3969       try to totally drain the region stack as soon as possible.
  3971       (5) SATB Buffer Queue. This is where completed SATB buffers are
  3972       made available. Buffers are regularly removed from this queue
  3973       and scanned for roots, so that the queue doesn't get too
  3974       long. During remark, all completed buffers are processed, as
  3975       well as the filled in parts of any uncompleted buffers.
  3977     The do_marking_step() method tries to abort when the time target
  3978     has been reached. There are a few other cases when the
  3979     do_marking_step() method also aborts:
  3981       (1) When the marking phase has been aborted (after a Full GC).
  3983       (2) When a global overflow (either on the global stack or the
  3984       region stack) has been triggered. Before the task aborts, it
  3985       will actually sync up with the other tasks to ensure that all
  3986       the marking data structures (local queues, stacks, fingers etc.)
  3987       are re-initialised so that when do_marking_step() completes,
  3988       the marking phase can immediately restart.
  3990       (3) When enough completed SATB buffers are available. The
  3991       do_marking_step() method only tries to drain SATB buffers right
  3992       at the beginning. So, if enough buffers are available, the
  3993       marking step aborts and the SATB buffers are processed at
  3994       the beginning of the next invocation.
  3996       (4) To yield. when we have to yield then we abort and yield
  3997       right at the end of do_marking_step(). This saves us from a lot
  3998       of hassle as, by yielding we might allow a Full GC. If this
  3999       happens then objects will be compacted underneath our feet, the
  4000       heap might shrink, etc. We save checking for this by just
  4001       aborting and doing the yield right at the end.
  4003     From the above it follows that the do_marking_step() method should
  4004     be called in a loop (or, otherwise, regularly) until it completes.
  4006     If a marking step completes without its has_aborted() flag being
  4007     true, it means it has completed the current marking phase (and
  4008     also all other marking tasks have done so and have all synced up).
  4010     A method called regular_clock_call() is invoked "regularly" (in
  4011     sub ms intervals) throughout marking. It is this clock method that
  4012     checks all the abort conditions which were mentioned above and
  4013     decides when the task should abort. A work-based scheme is used to
  4014     trigger this clock method: when the number of object words the
  4015     marking phase has scanned or the number of references the marking
  4016     phase has visited reach a given limit. Additional invocations to
  4017     the method clock have been planted in a few other strategic places
  4018     too. The initial reason for the clock method was to avoid calling
  4019     vtime too regularly, as it is quite expensive. So, once it was in
  4020     place, it was natural to piggy-back all the other conditions on it
  4021     too and not constantly check them throughout the code.
  4023  *****************************************************************************/
  4025 void CMTask::do_marking_step(double time_target_ms,
  4026                              bool do_stealing,
  4027                              bool do_termination) {
  4028   assert(time_target_ms >= 1.0, "minimum granularity is 1ms");
  4029   assert(concurrent() == _cm->concurrent(), "they should be the same");
  4031   assert(concurrent() || _cm->region_stack_empty(),
  4032          "the region stack should have been cleared before remark");
  4033   assert(concurrent() || !_cm->has_aborted_regions(),
  4034          "aborted regions should have been cleared before remark");
  4035   assert(_region_finger == NULL,
  4036          "this should be non-null only when a region is being scanned");
  4038   G1CollectorPolicy* g1_policy = _g1h->g1_policy();
  4039   assert(_task_queues != NULL, "invariant");
  4040   assert(_task_queue != NULL, "invariant");
  4041   assert(_task_queues->queue(_task_id) == _task_queue, "invariant");
  4043   assert(!_claimed,
  4044          "only one thread should claim this task at any one time");
  4046   // OK, this doesn't safeguard again all possible scenarios, as it is
  4047   // possible for two threads to set the _claimed flag at the same
  4048   // time. But it is only for debugging purposes anyway and it will
  4049   // catch most problems.
  4050   _claimed = true;
  4052   _start_time_ms = os::elapsedVTime() * 1000.0;
  4053   statsOnly( _interval_start_time_ms = _start_time_ms );
  4055   double diff_prediction_ms =
  4056     g1_policy->get_new_prediction(&_marking_step_diffs_ms);
  4057   _time_target_ms = time_target_ms - diff_prediction_ms;
  4059   // set up the variables that are used in the work-based scheme to
  4060   // call the regular clock method
  4061   _words_scanned = 0;
  4062   _refs_reached  = 0;
  4063   recalculate_limits();
  4065   // clear all flags
  4066   clear_has_aborted();
  4067   _has_timed_out = false;
  4068   _draining_satb_buffers = false;
  4070   ++_calls;
  4072   if (_cm->verbose_low())
  4073     gclog_or_tty->print_cr("[%d] >>>>>>>>>> START, call = %d, "
  4074                            "target = %1.2lfms >>>>>>>>>>",
  4075                            _task_id, _calls, _time_target_ms);
  4077   // Set up the bitmap and oop closures. Anything that uses them is
  4078   // eventually called from this method, so it is OK to allocate these
  4079   // statically.
  4080   CMBitMapClosure bitmap_closure(this, _cm, _nextMarkBitMap);
  4081   CMOopClosure    oop_closure(_g1h, _cm, this);
  4082   set_oop_closure(&oop_closure);
  4084   if (_cm->has_overflown()) {
  4085     // This can happen if the region stack or the mark stack overflows
  4086     // during a GC pause and this task, after a yield point,
  4087     // restarts. We have to abort as we need to get into the overflow
  4088     // protocol which happens right at the end of this task.
  4089     set_has_aborted();
  4092   // First drain any available SATB buffers. After this, we will not
  4093   // look at SATB buffers before the next invocation of this method.
  4094   // If enough completed SATB buffers are queued up, the regular clock
  4095   // will abort this task so that it restarts.
  4096   drain_satb_buffers();
  4097   // ...then partially drain the local queue and the global stack
  4098   drain_local_queue(true);
  4099   drain_global_stack(true);
  4101   // Then totally drain the region stack.  We will not look at
  4102   // it again before the next invocation of this method. Entries on
  4103   // the region stack are only added during evacuation pauses, for
  4104   // which we have to yield. When we do, we abort the task anyway so
  4105   // it will look at the region stack again when it restarts.
  4106   bitmap_closure.set_scanning_heap_region(false);
  4107   drain_region_stack(&bitmap_closure);
  4108   // ...then partially drain the local queue and the global stack
  4109   drain_local_queue(true);
  4110   drain_global_stack(true);
  4112   do {
  4113     if (!has_aborted() && _curr_region != NULL) {
  4114       // This means that we're already holding on to a region.
  4115       assert(_finger != NULL, "if region is not NULL, then the finger "
  4116              "should not be NULL either");
  4118       // We might have restarted this task after an evacuation pause
  4119       // which might have evacuated the region we're holding on to
  4120       // underneath our feet. Let's read its limit again to make sure
  4121       // that we do not iterate over a region of the heap that
  4122       // contains garbage (update_region_limit() will also move
  4123       // _finger to the start of the region if it is found empty).
  4124       update_region_limit();
  4125       // We will start from _finger not from the start of the region,
  4126       // as we might be restarting this task after aborting half-way
  4127       // through scanning this region. In this case, _finger points to
  4128       // the address where we last found a marked object. If this is a
  4129       // fresh region, _finger points to start().
  4130       MemRegion mr = MemRegion(_finger, _region_limit);
  4132       if (_cm->verbose_low())
  4133         gclog_or_tty->print_cr("[%d] we're scanning part "
  4134                                "["PTR_FORMAT", "PTR_FORMAT") "
  4135                                "of region "PTR_FORMAT,
  4136                                _task_id, _finger, _region_limit, _curr_region);
  4138       // Let's iterate over the bitmap of the part of the
  4139       // region that is left.
  4140       bitmap_closure.set_scanning_heap_region(true);
  4141       if (mr.is_empty() ||
  4142           _nextMarkBitMap->iterate(&bitmap_closure, mr)) {
  4143         // We successfully completed iterating over the region. Now,
  4144         // let's give up the region.
  4145         giveup_current_region();
  4146         regular_clock_call();
  4147       } else {
  4148         assert(has_aborted(), "currently the only way to do so");
  4149         // The only way to abort the bitmap iteration is to return
  4150         // false from the do_bit() method. However, inside the
  4151         // do_bit() method we move the _finger to point to the
  4152         // object currently being looked at. So, if we bail out, we
  4153         // have definitely set _finger to something non-null.
  4154         assert(_finger != NULL, "invariant");
  4156         // Region iteration was actually aborted. So now _finger
  4157         // points to the address of the object we last scanned. If we
  4158         // leave it there, when we restart this task, we will rescan
  4159         // the object. It is easy to avoid this. We move the finger by
  4160         // enough to point to the next possible object header (the
  4161         // bitmap knows by how much we need to move it as it knows its
  4162         // granularity).
  4163         assert(_finger < _region_limit, "invariant");
  4164         HeapWord* new_finger = _nextMarkBitMap->nextWord(_finger);
  4165         // Check if bitmap iteration was aborted while scanning the last object
  4166         if (new_finger >= _region_limit) {
  4167             giveup_current_region();
  4168         } else {
  4169             move_finger_to(new_finger);
  4173     // At this point we have either completed iterating over the
  4174     // region we were holding on to, or we have aborted.
  4176     // We then partially drain the local queue and the global stack.
  4177     // (Do we really need this?)
  4178     drain_local_queue(true);
  4179     drain_global_stack(true);
  4181     // Read the note on the claim_region() method on why it might
  4182     // return NULL with potentially more regions available for
  4183     // claiming and why we have to check out_of_regions() to determine
  4184     // whether we're done or not.
  4185     while (!has_aborted() && _curr_region == NULL && !_cm->out_of_regions()) {
  4186       // We are going to try to claim a new region. We should have
  4187       // given up on the previous one.
  4188       // Separated the asserts so that we know which one fires.
  4189       assert(_curr_region  == NULL, "invariant");
  4190       assert(_finger       == NULL, "invariant");
  4191       assert(_region_limit == NULL, "invariant");
  4192       if (_cm->verbose_low())
  4193         gclog_or_tty->print_cr("[%d] trying to claim a new region", _task_id);
  4194       HeapRegion* claimed_region = _cm->claim_region(_task_id);
  4195       if (claimed_region != NULL) {
  4196         // Yes, we managed to claim one
  4197         statsOnly( ++_regions_claimed );
  4199         if (_cm->verbose_low())
  4200           gclog_or_tty->print_cr("[%d] we successfully claimed "
  4201                                  "region "PTR_FORMAT,
  4202                                  _task_id, claimed_region);
  4204         setup_for_region(claimed_region);
  4205         assert(_curr_region == claimed_region, "invariant");
  4207       // It is important to call the regular clock here. It might take
  4208       // a while to claim a region if, for example, we hit a large
  4209       // block of empty regions. So we need to call the regular clock
  4210       // method once round the loop to make sure it's called
  4211       // frequently enough.
  4212       regular_clock_call();
  4215     if (!has_aborted() && _curr_region == NULL) {
  4216       assert(_cm->out_of_regions(),
  4217              "at this point we should be out of regions");
  4219   } while ( _curr_region != NULL && !has_aborted());
  4221   if (!has_aborted()) {
  4222     // We cannot check whether the global stack is empty, since other
  4223     // tasks might be pushing objects to it concurrently. We also cannot
  4224     // check if the region stack is empty because if a thread is aborting
  4225     // it can push a partially done region back.
  4226     assert(_cm->out_of_regions(),
  4227            "at this point we should be out of regions");
  4229     if (_cm->verbose_low())
  4230       gclog_or_tty->print_cr("[%d] all regions claimed", _task_id);
  4232     // Try to reduce the number of available SATB buffers so that
  4233     // remark has less work to do.
  4234     drain_satb_buffers();
  4237   // Since we've done everything else, we can now totally drain the
  4238   // local queue and global stack.
  4239   drain_local_queue(false);
  4240   drain_global_stack(false);
  4242   // Attempt at work stealing from other task's queues.
  4243   if (do_stealing && !has_aborted()) {
  4244     // We have not aborted. This means that we have finished all that
  4245     // we could. Let's try to do some stealing...
  4247     // We cannot check whether the global stack is empty, since other
  4248     // tasks might be pushing objects to it concurrently. We also cannot
  4249     // check if the region stack is empty because if a thread is aborting
  4250     // it can push a partially done region back.
  4251     assert(_cm->out_of_regions() && _task_queue->size() == 0,
  4252            "only way to reach here");
  4254     if (_cm->verbose_low())
  4255       gclog_or_tty->print_cr("[%d] starting to steal", _task_id);
  4257     while (!has_aborted()) {
  4258       oop obj;
  4259       statsOnly( ++_steal_attempts );
  4261       if (_cm->try_stealing(_task_id, &_hash_seed, obj)) {
  4262         if (_cm->verbose_medium())
  4263           gclog_or_tty->print_cr("[%d] stolen "PTR_FORMAT" successfully",
  4264                                  _task_id, (void*) obj);
  4266         statsOnly( ++_steals );
  4268         assert(_nextMarkBitMap->isMarked((HeapWord*) obj),
  4269                "any stolen object should be marked");
  4270         scan_object(obj);
  4272         // And since we're towards the end, let's totally drain the
  4273         // local queue and global stack.
  4274         drain_local_queue(false);
  4275         drain_global_stack(false);
  4276       } else {
  4277         break;
  4282   // We still haven't aborted. Now, let's try to get into the
  4283   // termination protocol.
  4284   if (do_termination && !has_aborted()) {
  4285     // We cannot check whether the global stack is empty, since other
  4286     // tasks might be concurrently pushing objects on it. We also cannot
  4287     // check if the region stack is empty because if a thread is aborting
  4288     // it can push a partially done region back.
  4289     // Separated the asserts so that we know which one fires.
  4290     assert(_cm->out_of_regions(), "only way to reach here");
  4291     assert(_task_queue->size() == 0, "only way to reach here");
  4293     if (_cm->verbose_low())
  4294       gclog_or_tty->print_cr("[%d] starting termination protocol", _task_id);
  4296     _termination_start_time_ms = os::elapsedVTime() * 1000.0;
  4297     // The CMTask class also extends the TerminatorTerminator class,
  4298     // hence its should_exit_termination() method will also decide
  4299     // whether to exit the termination protocol or not.
  4300     bool finished = _cm->terminator()->offer_termination(this);
  4301     double termination_end_time_ms = os::elapsedVTime() * 1000.0;
  4302     _termination_time_ms +=
  4303       termination_end_time_ms - _termination_start_time_ms;
  4305     if (finished) {
  4306       // We're all done.
  4308       if (_task_id == 0) {
  4309         // let's allow task 0 to do this
  4310         if (concurrent()) {
  4311           assert(_cm->concurrent_marking_in_progress(), "invariant");
  4312           // we need to set this to false before the next
  4313           // safepoint. This way we ensure that the marking phase
  4314           // doesn't observe any more heap expansions.
  4315           _cm->clear_concurrent_marking_in_progress();
  4319       // We can now guarantee that the global stack is empty, since
  4320       // all other tasks have finished. We separated the guarantees so
  4321       // that, if a condition is false, we can immediately find out
  4322       // which one.
  4323       guarantee(_cm->out_of_regions(), "only way to reach here");
  4324       guarantee(_aborted_region.is_empty(), "only way to reach here");
  4325       guarantee(_cm->region_stack_empty(), "only way to reach here");
  4326       guarantee(_cm->mark_stack_empty(), "only way to reach here");
  4327       guarantee(_task_queue->size() == 0, "only way to reach here");
  4328       guarantee(!_cm->has_overflown(), "only way to reach here");
  4329       guarantee(!_cm->mark_stack_overflow(), "only way to reach here");
  4330       guarantee(!_cm->region_stack_overflow(), "only way to reach here");
  4332       if (_cm->verbose_low())
  4333         gclog_or_tty->print_cr("[%d] all tasks terminated", _task_id);
  4334     } else {
  4335       // Apparently there's more work to do. Let's abort this task. It
  4336       // will restart it and we can hopefully find more things to do.
  4338       if (_cm->verbose_low())
  4339         gclog_or_tty->print_cr("[%d] apparently there is more work to do", _task_id);
  4341       set_has_aborted();
  4342       statsOnly( ++_aborted_termination );
  4346   // Mainly for debugging purposes to make sure that a pointer to the
  4347   // closure which was statically allocated in this frame doesn't
  4348   // escape it by accident.
  4349   set_oop_closure(NULL);
  4350   double end_time_ms = os::elapsedVTime() * 1000.0;
  4351   double elapsed_time_ms = end_time_ms - _start_time_ms;
  4352   // Update the step history.
  4353   _step_times_ms.add(elapsed_time_ms);
  4355   if (has_aborted()) {
  4356     // The task was aborted for some reason.
  4358     statsOnly( ++_aborted );
  4360     if (_has_timed_out) {
  4361       double diff_ms = elapsed_time_ms - _time_target_ms;
  4362       // Keep statistics of how well we did with respect to hitting
  4363       // our target only if we actually timed out (if we aborted for
  4364       // other reasons, then the results might get skewed).
  4365       _marking_step_diffs_ms.add(diff_ms);
  4368     if (_cm->has_overflown()) {
  4369       // This is the interesting one. We aborted because a global
  4370       // overflow was raised. This means we have to restart the
  4371       // marking phase and start iterating over regions. However, in
  4372       // order to do this we have to make sure that all tasks stop
  4373       // what they are doing and re-initialise in a safe manner. We
  4374       // will achieve this with the use of two barrier sync points.
  4376       if (_cm->verbose_low())
  4377         gclog_or_tty->print_cr("[%d] detected overflow", _task_id);
  4379       _cm->enter_first_sync_barrier(_task_id);
  4380       // When we exit this sync barrier we know that all tasks have
  4381       // stopped doing marking work. So, it's now safe to
  4382       // re-initialise our data structures. At the end of this method,
  4383       // task 0 will clear the global data structures.
  4385       statsOnly( ++_aborted_overflow );
  4387       // We clear the local state of this task...
  4388       clear_region_fields();
  4390       // ...and enter the second barrier.
  4391       _cm->enter_second_sync_barrier(_task_id);
  4392       // At this point everything has bee re-initialised and we're
  4393       // ready to restart.
  4396     if (_cm->verbose_low()) {
  4397       gclog_or_tty->print_cr("[%d] <<<<<<<<<< ABORTING, target = %1.2lfms, "
  4398                              "elapsed = %1.2lfms <<<<<<<<<<",
  4399                              _task_id, _time_target_ms, elapsed_time_ms);
  4400       if (_cm->has_aborted())
  4401         gclog_or_tty->print_cr("[%d] ========== MARKING ABORTED ==========",
  4402                                _task_id);
  4404   } else {
  4405     if (_cm->verbose_low())
  4406       gclog_or_tty->print_cr("[%d] <<<<<<<<<< FINISHED, target = %1.2lfms, "
  4407                              "elapsed = %1.2lfms <<<<<<<<<<",
  4408                              _task_id, _time_target_ms, elapsed_time_ms);
  4411   _claimed = false;
  4414 CMTask::CMTask(int task_id,
  4415                ConcurrentMark* cm,
  4416                CMTaskQueue* task_queue,
  4417                CMTaskQueueSet* task_queues)
  4418   : _g1h(G1CollectedHeap::heap()),
  4419     _task_id(task_id), _cm(cm),
  4420     _claimed(false),
  4421     _nextMarkBitMap(NULL), _hash_seed(17),
  4422     _task_queue(task_queue),
  4423     _task_queues(task_queues),
  4424     _oop_closure(NULL),
  4425     _aborted_region(MemRegion()) {
  4426   guarantee(task_queue != NULL, "invariant");
  4427   guarantee(task_queues != NULL, "invariant");
  4429   statsOnly( _clock_due_to_scanning = 0;
  4430              _clock_due_to_marking  = 0 );
  4432   _marking_step_diffs_ms.add(0.5);
  4435 // These are formatting macros that are used below to ensure
  4436 // consistent formatting. The *_H_* versions are used to format the
  4437 // header for a particular value and they should be kept consistent
  4438 // with the corresponding macro. Also note that most of the macros add
  4439 // the necessary white space (as a prefix) which makes them a bit
  4440 // easier to compose.
  4442 // All the output lines are prefixed with this string to be able to
  4443 // identify them easily in a large log file.
  4444 #define G1PPRL_LINE_PREFIX            "###"
  4446 #define G1PPRL_ADDR_BASE_FORMAT    " "PTR_FORMAT"-"PTR_FORMAT
  4447 #ifdef _LP64
  4448 #define G1PPRL_ADDR_BASE_H_FORMAT  " %37s"
  4449 #else // _LP64
  4450 #define G1PPRL_ADDR_BASE_H_FORMAT  " %21s"
  4451 #endif // _LP64
  4453 // For per-region info
  4454 #define G1PPRL_TYPE_FORMAT            "   %-4s"
  4455 #define G1PPRL_TYPE_H_FORMAT          "   %4s"
  4456 #define G1PPRL_BYTE_FORMAT            "  "SIZE_FORMAT_W(9)
  4457 #define G1PPRL_BYTE_H_FORMAT          "  %9s"
  4458 #define G1PPRL_DOUBLE_FORMAT          "  %14.1f"
  4459 #define G1PPRL_DOUBLE_H_FORMAT        "  %14s"
  4461 // For summary info
  4462 #define G1PPRL_SUM_ADDR_FORMAT(tag)    "  "tag":"G1PPRL_ADDR_BASE_FORMAT
  4463 #define G1PPRL_SUM_BYTE_FORMAT(tag)    "  "tag": "SIZE_FORMAT
  4464 #define G1PPRL_SUM_MB_FORMAT(tag)      "  "tag": %1.2f MB"
  4465 #define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag)" / %1.2f %%"
  4467 G1PrintRegionLivenessInfoClosure::
  4468 G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name)
  4469   : _out(out),
  4470     _total_used_bytes(0), _total_capacity_bytes(0),
  4471     _total_prev_live_bytes(0), _total_next_live_bytes(0),
  4472     _hum_used_bytes(0), _hum_capacity_bytes(0),
  4473     _hum_prev_live_bytes(0), _hum_next_live_bytes(0) {
  4474   G1CollectedHeap* g1h = G1CollectedHeap::heap();
  4475   MemRegion g1_committed = g1h->g1_committed();
  4476   MemRegion g1_reserved = g1h->g1_reserved();
  4477   double now = os::elapsedTime();
  4479   // Print the header of the output.
  4480   _out->cr();
  4481   _out->print_cr(G1PPRL_LINE_PREFIX" PHASE %s @ %1.3f", phase_name, now);
  4482   _out->print_cr(G1PPRL_LINE_PREFIX" HEAP"
  4483                  G1PPRL_SUM_ADDR_FORMAT("committed")
  4484                  G1PPRL_SUM_ADDR_FORMAT("reserved")
  4485                  G1PPRL_SUM_BYTE_FORMAT("region-size"),
  4486                  g1_committed.start(), g1_committed.end(),
  4487                  g1_reserved.start(), g1_reserved.end(),
  4488                  HeapRegion::GrainBytes);
  4489   _out->print_cr(G1PPRL_LINE_PREFIX);
  4490   _out->print_cr(G1PPRL_LINE_PREFIX
  4491                  G1PPRL_TYPE_H_FORMAT
  4492                  G1PPRL_ADDR_BASE_H_FORMAT
  4493                  G1PPRL_BYTE_H_FORMAT
  4494                  G1PPRL_BYTE_H_FORMAT
  4495                  G1PPRL_BYTE_H_FORMAT
  4496                  G1PPRL_DOUBLE_H_FORMAT,
  4497                  "type", "address-range",
  4498                  "used", "prev-live", "next-live", "gc-eff");
  4501 // It takes as a parameter a reference to one of the _hum_* fields, it
  4502 // deduces the corresponding value for a region in a humongous region
  4503 // series (either the region size, or what's left if the _hum_* field
  4504 // is < the region size), and updates the _hum_* field accordingly.
  4505 size_t G1PrintRegionLivenessInfoClosure::get_hum_bytes(size_t* hum_bytes) {
  4506   size_t bytes = 0;
  4507   // The > 0 check is to deal with the prev and next live bytes which
  4508   // could be 0.
  4509   if (*hum_bytes > 0) {
  4510     bytes = MIN2((size_t) HeapRegion::GrainBytes, *hum_bytes);
  4511     *hum_bytes -= bytes;
  4513   return bytes;
  4516 // It deduces the values for a region in a humongous region series
  4517 // from the _hum_* fields and updates those accordingly. It assumes
  4518 // that that _hum_* fields have already been set up from the "starts
  4519 // humongous" region and we visit the regions in address order.
  4520 void G1PrintRegionLivenessInfoClosure::get_hum_bytes(size_t* used_bytes,
  4521                                                      size_t* capacity_bytes,
  4522                                                      size_t* prev_live_bytes,
  4523                                                      size_t* next_live_bytes) {
  4524   assert(_hum_used_bytes > 0 && _hum_capacity_bytes > 0, "pre-condition");
  4525   *used_bytes      = get_hum_bytes(&_hum_used_bytes);
  4526   *capacity_bytes  = get_hum_bytes(&_hum_capacity_bytes);
  4527   *prev_live_bytes = get_hum_bytes(&_hum_prev_live_bytes);
  4528   *next_live_bytes = get_hum_bytes(&_hum_next_live_bytes);
  4531 bool G1PrintRegionLivenessInfoClosure::doHeapRegion(HeapRegion* r) {
  4532   const char* type = "";
  4533   HeapWord* bottom       = r->bottom();
  4534   HeapWord* end          = r->end();
  4535   size_t capacity_bytes  = r->capacity();
  4536   size_t used_bytes      = r->used();
  4537   size_t prev_live_bytes = r->live_bytes();
  4538   size_t next_live_bytes = r->next_live_bytes();
  4539   double gc_eff          = r->gc_efficiency();
  4540   if (r->used() == 0) {
  4541     type = "FREE";
  4542   } else if (r->is_survivor()) {
  4543     type = "SURV";
  4544   } else if (r->is_young()) {
  4545     type = "EDEN";
  4546   } else if (r->startsHumongous()) {
  4547     type = "HUMS";
  4549     assert(_hum_used_bytes == 0 && _hum_capacity_bytes == 0 &&
  4550            _hum_prev_live_bytes == 0 && _hum_next_live_bytes == 0,
  4551            "they should have been zeroed after the last time we used them");
  4552     // Set up the _hum_* fields.
  4553     _hum_capacity_bytes  = capacity_bytes;
  4554     _hum_used_bytes      = used_bytes;
  4555     _hum_prev_live_bytes = prev_live_bytes;
  4556     _hum_next_live_bytes = next_live_bytes;
  4557     get_hum_bytes(&used_bytes, &capacity_bytes,
  4558                   &prev_live_bytes, &next_live_bytes);
  4559     end = bottom + HeapRegion::GrainWords;
  4560   } else if (r->continuesHumongous()) {
  4561     type = "HUMC";
  4562     get_hum_bytes(&used_bytes, &capacity_bytes,
  4563                   &prev_live_bytes, &next_live_bytes);
  4564     assert(end == bottom + HeapRegion::GrainWords, "invariant");
  4565   } else {
  4566     type = "OLD";
  4569   _total_used_bytes      += used_bytes;
  4570   _total_capacity_bytes  += capacity_bytes;
  4571   _total_prev_live_bytes += prev_live_bytes;
  4572   _total_next_live_bytes += next_live_bytes;
  4574   // Print a line for this particular region.
  4575   _out->print_cr(G1PPRL_LINE_PREFIX
  4576                  G1PPRL_TYPE_FORMAT
  4577                  G1PPRL_ADDR_BASE_FORMAT
  4578                  G1PPRL_BYTE_FORMAT
  4579                  G1PPRL_BYTE_FORMAT
  4580                  G1PPRL_BYTE_FORMAT
  4581                  G1PPRL_DOUBLE_FORMAT,
  4582                  type, bottom, end,
  4583                  used_bytes, prev_live_bytes, next_live_bytes, gc_eff);
  4585   return false;
  4588 G1PrintRegionLivenessInfoClosure::~G1PrintRegionLivenessInfoClosure() {
  4589   // Print the footer of the output.
  4590   _out->print_cr(G1PPRL_LINE_PREFIX);
  4591   _out->print_cr(G1PPRL_LINE_PREFIX
  4592                  " SUMMARY"
  4593                  G1PPRL_SUM_MB_FORMAT("capacity")
  4594                  G1PPRL_SUM_MB_PERC_FORMAT("used")
  4595                  G1PPRL_SUM_MB_PERC_FORMAT("prev-live")
  4596                  G1PPRL_SUM_MB_PERC_FORMAT("next-live"),
  4597                  bytes_to_mb(_total_capacity_bytes),
  4598                  bytes_to_mb(_total_used_bytes),
  4599                  perc(_total_used_bytes, _total_capacity_bytes),
  4600                  bytes_to_mb(_total_prev_live_bytes),
  4601                  perc(_total_prev_live_bytes, _total_capacity_bytes),
  4602                  bytes_to_mb(_total_next_live_bytes),
  4603                  perc(_total_next_live_bytes, _total_capacity_bytes));
  4604   _out->cr();

mercurial