src/hotspot/share/gc/g1/g1EvacFailure.cpp
changeset 49806 2d62570a615c
parent 49722 a47d1e21b3f1
child 50752 9d62da00bf15
equal deleted inserted replaced
49805:1ccbcd88f66c 49806:2d62570a615c
    38 #include "oops/compressedOops.inline.hpp"
    38 #include "oops/compressedOops.inline.hpp"
    39 #include "oops/oop.inline.hpp"
    39 #include "oops/oop.inline.hpp"
    40 
    40 
    41 class UpdateRSetDeferred : public ExtendedOopClosure {
    41 class UpdateRSetDeferred : public ExtendedOopClosure {
    42 private:
    42 private:
    43   G1CollectedHeap* _g1;
    43   G1CollectedHeap* _g1h;
    44   DirtyCardQueue* _dcq;
    44   DirtyCardQueue* _dcq;
    45   G1CardTable*    _ct;
    45   G1CardTable*    _ct;
    46 
    46 
    47 public:
    47 public:
    48   UpdateRSetDeferred(DirtyCardQueue* dcq) :
    48   UpdateRSetDeferred(DirtyCardQueue* dcq) :
    49     _g1(G1CollectedHeap::heap()), _ct(_g1->card_table()), _dcq(dcq) {}
    49     _g1h(G1CollectedHeap::heap()), _ct(_g1h->card_table()), _dcq(dcq) {}
    50 
    50 
    51   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
    51   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
    52   virtual void do_oop(      oop* p) { do_oop_work(p); }
    52   virtual void do_oop(      oop* p) { do_oop_work(p); }
    53   template <class T> void do_oop_work(T* p) {
    53   template <class T> void do_oop_work(T* p) {
    54     assert(_g1->heap_region_containing(p)->is_in_reserved(p), "paranoia");
    54     assert(_g1h->heap_region_containing(p)->is_in_reserved(p), "paranoia");
    55     assert(!_g1->heap_region_containing(p)->is_survivor(), "Unexpected evac failure in survivor region");
    55     assert(!_g1h->heap_region_containing(p)->is_survivor(), "Unexpected evac failure in survivor region");
    56 
    56 
    57     T const o = RawAccess<>::oop_load(p);
    57     T const o = RawAccess<>::oop_load(p);
    58     if (CompressedOops::is_null(o)) {
    58     if (CompressedOops::is_null(o)) {
    59       return;
    59       return;
    60     }
    60     }
    68     }
    68     }
    69   }
    69   }
    70 };
    70 };
    71 
    71 
    72 class RemoveSelfForwardPtrObjClosure: public ObjectClosure {
    72 class RemoveSelfForwardPtrObjClosure: public ObjectClosure {
    73 private:
    73   G1CollectedHeap* _g1h;
    74   G1CollectedHeap* _g1;
       
    75   G1ConcurrentMark* _cm;
    74   G1ConcurrentMark* _cm;
    76   HeapRegion* _hr;
    75   HeapRegion* _hr;
    77   size_t _marked_bytes;
    76   size_t _marked_bytes;
    78   UpdateRSetDeferred* _update_rset_cl;
    77   UpdateRSetDeferred* _update_rset_cl;
    79   bool _during_initial_mark;
    78   bool _during_initial_mark;
    83 public:
    82 public:
    84   RemoveSelfForwardPtrObjClosure(HeapRegion* hr,
    83   RemoveSelfForwardPtrObjClosure(HeapRegion* hr,
    85                                  UpdateRSetDeferred* update_rset_cl,
    84                                  UpdateRSetDeferred* update_rset_cl,
    86                                  bool during_initial_mark,
    85                                  bool during_initial_mark,
    87                                  uint worker_id) :
    86                                  uint worker_id) :
    88     _g1(G1CollectedHeap::heap()),
    87     _g1h(G1CollectedHeap::heap()),
    89     _cm(_g1->concurrent_mark()),
    88     _cm(_g1h->concurrent_mark()),
    90     _hr(hr),
    89     _hr(hr),
    91     _marked_bytes(0),
    90     _marked_bytes(0),
    92     _update_rset_cl(update_rset_cl),
    91     _update_rset_cl(update_rset_cl),
    93     _during_initial_mark(during_initial_mark),
    92     _during_initial_mark(during_initial_mark),
    94     _worker_id(worker_id),
    93     _worker_id(worker_id),