< prev index next >

src/share/vm/gc/g1/g1EvacFailure.cpp

Print this page
rev 12906 : [mq]: gc_interface


  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "gc/g1/dirtyCardQueue.hpp"
  27 #include "gc/g1/g1CollectedHeap.inline.hpp"
  28 #include "gc/g1/g1CollectorState.hpp"
  29 #include "gc/g1/g1ConcurrentMark.inline.hpp"
  30 #include "gc/g1/g1EvacFailure.hpp"
  31 #include "gc/g1/g1HeapVerifier.hpp"
  32 #include "gc/g1/g1OopClosures.inline.hpp"
  33 #include "gc/g1/g1_globals.hpp"
  34 #include "gc/g1/heapRegion.hpp"
  35 #include "gc/g1/heapRegionRemSet.hpp"
  36 #include "gc/shared/preservedMarks.inline.hpp"
  37 
  38 class UpdateRSetDeferred : public OopsInHeapRegionClosure {
  39 private:
  40   G1CollectedHeap* _g1;
  41   DirtyCardQueue *_dcq;
  42   G1SATBCardTableModRefBS* _ct_bs;
  43 
  44 public:
  45   UpdateRSetDeferred(DirtyCardQueue* dcq) :
  46     _g1(G1CollectedHeap::heap()), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq) {}
  47 
  48   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  49   virtual void do_oop(      oop* p) { do_oop_work(p); }
  50   template <class T> void do_oop_work(T* p) {
  51     assert(_from->is_in_reserved(p), "paranoia");
  52     assert(!_from->is_survivor(), "Unexpected evac failure in survivor region");
  53 
  54     if (!_from->is_in_reserved(oopDesc::load_decode_heap_oop(p))) {
  55       size_t card_index = _ct_bs->index_for(p);
  56       if (_ct_bs->mark_card_deferred(card_index)) {
  57         _dcq->enqueue((jbyte*)_ct_bs->byte_for_index(card_index));
  58       }
  59     }
  60   }
  61 };
  62 
  63 class RemoveSelfForwardPtrObjClosure: public ObjectClosure {
  64 private:
  65   G1CollectedHeap* _g1;
  66   G1ConcurrentMark* _cm;
  67   HeapRegion* _hr;
  68   size_t _marked_bytes;
  69   OopsInHeapRegionClosure *_update_rset_cl;
  70   bool _during_initial_mark;
  71   uint _worker_id;
  72   HeapWord* _last_forwarded_object_end;
  73 
  74 public:
  75   RemoveSelfForwardPtrObjClosure(HeapRegion* hr,
  76                                  OopsInHeapRegionClosure* update_rset_cl,
  77                                  bool during_initial_mark,




  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "gc/g1/dirtyCardQueue.hpp"
  27 #include "gc/g1/g1CollectedHeap.inline.hpp"
  28 #include "gc/g1/g1CollectorState.hpp"
  29 #include "gc/g1/g1ConcurrentMark.inline.hpp"
  30 #include "gc/g1/g1EvacFailure.hpp"
  31 #include "gc/g1/g1HeapVerifier.hpp"
  32 #include "gc/g1/g1OopClosures.inline.hpp"
  33 #include "gc/g1/g1_globals.hpp"
  34 #include "gc/g1/heapRegion.hpp"
  35 #include "gc/g1/heapRegionRemSet.hpp"
  36 #include "gc/shared/preservedMarks.inline.hpp"
  37 
  38 class UpdateRSetDeferred : public OopsInHeapRegionClosure {
  39 private:
  40   G1CollectedHeap* _g1;
  41   DirtyCardQueue *_dcq;
  42   G1CardTable* _ct;
  43 
  44 public:
  45   UpdateRSetDeferred(DirtyCardQueue* dcq) :
  46     _g1(G1CollectedHeap::heap()), _ct(_g1->g1_card_table()), _dcq(dcq) {}
  47 
  48   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
  49   virtual void do_oop(      oop* p) { do_oop_work(p); }
  50   template <class T> void do_oop_work(T* p) {
  51     assert(_from->is_in_reserved(p), "paranoia");
  52     assert(!_from->is_survivor(), "Unexpected evac failure in survivor region");
  53 
  54     if (!_from->is_in_reserved(oopDesc::load_decode_heap_oop(p))) {
  55       size_t card_index = _ct->index_for(p);
  56       if (_ct->mark_card_deferred(card_index)) {
  57         _dcq->enqueue((jbyte*)_ct->byte_for_index(card_index));
  58       }
  59     }
  60   }
  61 };
  62 
  63 class RemoveSelfForwardPtrObjClosure: public ObjectClosure {
  64 private:
  65   G1CollectedHeap* _g1;
  66   G1ConcurrentMark* _cm;
  67   HeapRegion* _hr;
  68   size_t _marked_bytes;
  69   OopsInHeapRegionClosure *_update_rset_cl;
  70   bool _during_initial_mark;
  71   uint _worker_id;
  72   HeapWord* _last_forwarded_object_end;
  73 
  74 public:
  75   RemoveSelfForwardPtrObjClosure(HeapRegion* hr,
  76                                  OopsInHeapRegionClosure* update_rset_cl,
  77                                  bool during_initial_mark,


< prev index next >