8040804: G1: Concurrent mark stuck in loop calling os::elapsedVTime()

Wed, 14 May 2014 14:32:23 +0200

author
pliden
date
Wed, 14 May 2014 14:32:23 +0200
changeset 6693
8a140676873f
parent 6692
487f09bf44e0
child 6694
6a0ad2977919

8040804: G1: Concurrent mark stuck in loop calling os::elapsedVTime()
Reviewed-by: brutisso, tschatzl

src/share/vm/gc_implementation/g1/concurrentMark.cpp file | annotate | diff | comparison | revisions
src/share/vm/gc_implementation/g1/concurrentMark.hpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed May 14 13:32:44 2014 +0200
     1.2 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed May 14 14:32:23 2014 +0200
     1.3 @@ -819,7 +819,7 @@
     1.4      // false before we start remark. At this point we should also be
     1.5      // in a STW phase.
     1.6      assert(!concurrent_marking_in_progress(), "invariant");
     1.7 -    assert(_finger == _heap_end,
     1.8 +    assert(out_of_regions(),
     1.9             err_msg("only way to get here: _finger: "PTR_FORMAT", _heap_end: "PTR_FORMAT,
    1.10                     p2i(_finger), p2i(_heap_end)));
    1.11      update_g1_committed(true);
     2.1 --- a/src/share/vm/gc_implementation/g1/concurrentMark.hpp	Wed May 14 13:32:44 2014 +0200
     2.2 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.hpp	Wed May 14 14:32:23 2014 +0200
     2.3 @@ -542,8 +542,12 @@
     2.4    // frequently.
     2.5    HeapRegion* claim_region(uint worker_id);
     2.6  
     2.7 -  // It determines whether we've run out of regions to scan.
     2.8 -  bool        out_of_regions() { return _finger == _heap_end; }
     2.9 +  // It determines whether we've run out of regions to scan. Note that
    2.10 +  // the finger can point past the heap end in case the heap was expanded
    2.11 +  // to satisfy an allocation without doing a GC. This is fine, because all
    2.12 +  // objects in those regions will be considered live anyway because of
    2.13 +  // SATB guarantees (i.e. their TAMS will be equal to bottom).
    2.14 +  bool        out_of_regions() { return _finger >= _heap_end; }
    2.15  
    2.16    // Returns the task with the given id
    2.17    CMTask* task(int id) {

mercurial