src/share/vm/memory/referenceProcessor.hpp

Print this page
rev 5823 : 8031703: Missing post-barrier in ReferenceProcessor


  82   // Set value depending on UseCompressedOops. This could be a template class
  83   // but then we have to fix all the instantiations and declarations that use this class.
  84   oop       _oop_head;
  85   narrowOop _compressed_head;
  86   size_t _len;
  87 };
  88 
  89 // Iterator for the list of discovered references.
  90 class DiscoveredListIterator {
  91 private:
  92   DiscoveredList&    _refs_list;
  93   HeapWord*          _prev_next;
  94   oop                _prev;
  95   oop                _ref;
  96   HeapWord*          _discovered_addr;
  97   oop                _next;
  98   HeapWord*          _referent_addr;
  99   oop                _referent;
 100   OopClosure*        _keep_alive;
 101   BoolObjectClosure* _is_alive;

 102 
 103   DEBUG_ONLY(
 104   oop                _first_seen; // cyclic linked list check
 105   )
 106 
 107   NOT_PRODUCT(
 108   size_t             _processed;
 109   size_t             _removed;
 110   )
 111 
 112 public:
 113   inline DiscoveredListIterator(DiscoveredList&    refs_list,
 114                                 OopClosure*        keep_alive,
 115                                 BoolObjectClosure* is_alive):

 116     _refs_list(refs_list),
 117     _prev_next(refs_list.adr_head()),
 118     _prev(NULL),
 119     _ref(refs_list.head()),
 120 #ifdef ASSERT
 121     _first_seen(refs_list.head()),
 122 #endif
 123 #ifndef PRODUCT
 124     _processed(0),
 125     _removed(0),
 126 #endif
 127     _next(NULL),
 128     _keep_alive(keep_alive),
 129     _is_alive(is_alive)

 130 { }
 131 
 132   // End Of List.
 133   inline bool has_next() const { return _ref != NULL; }
 134 
 135   // Get oop to the Reference object.
 136   inline oop obj() const { return _ref; }
 137 
 138   // Get oop to the referent object.
 139   inline oop referent() const { return _referent; }
 140 
 141   // Returns true if referent is alive.
 142   inline bool is_referent_alive() const {
 143     return _is_alive->do_object_b(_referent);
 144   }
 145 
 146   // Loads data for the current reference.
 147   // The "allow_null_referent" argument tells us to allow for the possibility
 148   // of a NULL referent in the discovered Reference object. This typically
 149   // happens in the case of concurrent collectors that may have done the




  82   // Set value depending on UseCompressedOops. This could be a template class
  83   // but then we have to fix all the instantiations and declarations that use this class.
  84   oop       _oop_head;
  85   narrowOop _compressed_head;
  86   size_t _len;
  87 };
  88 
  89 // Iterator for the list of discovered references.
  90 class DiscoveredListIterator {
  91 private:
  92   DiscoveredList&    _refs_list;
  93   HeapWord*          _prev_next;
  94   oop                _prev;
  95   oop                _ref;
  96   HeapWord*          _discovered_addr;
  97   oop                _next;
  98   HeapWord*          _referent_addr;
  99   oop                _referent;
 100   OopClosure*        _keep_alive;
 101   BoolObjectClosure* _is_alive;
 102   bool               _discovered_list_needs_barrier;
 103 
 104   DEBUG_ONLY(
 105   oop                _first_seen; // cyclic linked list check
 106   )
 107 
 108   NOT_PRODUCT(
 109   size_t             _processed;
 110   size_t             _removed;
 111   )
 112 
 113 public:
 114   inline DiscoveredListIterator(DiscoveredList&    refs_list,
 115                                 OopClosure*        keep_alive,
 116                                 BoolObjectClosure* is_alive,
 117                                 bool               discovered_list_needs_barrier):
 118     _refs_list(refs_list),
 119     _prev_next(refs_list.adr_head()),
 120     _prev(NULL),
 121     _ref(refs_list.head()),
 122 #ifdef ASSERT
 123     _first_seen(refs_list.head()),
 124 #endif
 125 #ifndef PRODUCT
 126     _processed(0),
 127     _removed(0),
 128 #endif
 129     _next(NULL),
 130     _keep_alive(keep_alive),
 131     _is_alive(is_alive),
 132     _discovered_list_needs_barrier(discovered_list_needs_barrier)
 133 { }
 134 
 135   // End Of List.
 136   inline bool has_next() const { return _ref != NULL; }
 137 
 138   // Get oop to the Reference object.
 139   inline oop obj() const { return _ref; }
 140 
 141   // Get oop to the referent object.
 142   inline oop referent() const { return _referent; }
 143 
 144   // Returns true if referent is alive.
 145   inline bool is_referent_alive() const {
 146     return _is_alive->do_object_b(_referent);
 147   }
 148 
 149   // Loads data for the current reference.
 150   // The "allow_null_referent" argument tells us to allow for the possibility
 151   // of a NULL referent in the discovered Reference object. This typically
 152   // happens in the case of concurrent collectors that may have done the