< prev index next >

src/hotspot/share/gc/g1/g1ConcurrentMark.hpp

Print this page
rev 49944 : imported patch 8201492-properly-implement-non-contiguous-reference-processing


  92   bool is_null() const { return _holder == NULL; }
  93 };
  94 
  95 #ifdef _MSC_VER
  96 #pragma warning(pop)
  97 #endif
  98 
  99 typedef GenericTaskQueue<G1TaskQueueEntry, mtGC> G1CMTaskQueue;
 100 typedef GenericTaskQueueSet<G1CMTaskQueue, mtGC> G1CMTaskQueueSet;
 101 
 102 // Closure used by CM during concurrent reference discovery
 103 // and reference processing (during remarking) to determine
 104 // if a particular object is alive. It is primarily used
 105 // to determine if referents of discovered reference objects
 106 // are alive. An instance is also embedded into the
 107 // reference processor as the _is_alive_non_header field
 108 class G1CMIsAliveClosure : public BoolObjectClosure {
 109   G1CollectedHeap* _g1h;
 110 public:
 111   G1CMIsAliveClosure(G1CollectedHeap* g1h) : _g1h(g1h) { }


 112 




 113   bool do_object_b(oop obj);
 114 };
 115 
 116 // Represents the overflow mark stack used by concurrent marking.
 117 //
 118 // Stores oops in a huge buffer in virtual memory that is always fully committed.
 119 // Resizing may only happen during a STW pause when the stack is empty.
 120 //
 121 // Memory is allocated on a "chunk" basis, i.e. a set of oops. For this, the mark
 122 // stack memory is split into evenly sized chunks of oops. Users can only
 123 // add or remove entries on that basis.
 124 // Chunks are filled in increasing address order. Not completely filled chunks
 125 // have a NULL element as a terminating element.
 126 //
 127 // Every chunk has a header containing a single pointer element used for memory
 128 // management. This wastes some space, but is negligible (< .1% with current sizing).
 129 //
 130 // Memory management is done using a mix of tracking a high water-mark indicating
 131 // that all chunks at a lower address are valid chunks, and a singly linked free
 132 // list connecting all empty chunks.




  92   bool is_null() const { return _holder == NULL; }
  93 };
  94 
  95 #ifdef _MSC_VER
  96 #pragma warning(pop)
  97 #endif
  98 
  99 typedef GenericTaskQueue<G1TaskQueueEntry, mtGC> G1CMTaskQueue;
 100 typedef GenericTaskQueueSet<G1CMTaskQueue, mtGC> G1CMTaskQueueSet;
 101 
 102 // Closure used by CM during concurrent reference discovery
 103 // and reference processing (during remarking) to determine
 104 // if a particular object is alive. It is primarily used
 105 // to determine if referents of discovered reference objects
 106 // are alive. An instance is also embedded into the
 107 // reference processor as the _is_alive_non_header field
 108 class G1CMIsAliveClosure : public BoolObjectClosure {
 109   G1CollectedHeap* _g1h;
 110 public:
 111   G1CMIsAliveClosure(G1CollectedHeap* g1h) : _g1h(g1h) { }
 112   bool do_object_b(oop obj);
 113 };
 114 
 115 class G1CMSubjectToDiscoveryClosure : public BoolObjectClosure {
 116   G1CollectedHeap* _g1h;
 117 public:
 118   G1CMSubjectToDiscoveryClosure(G1CollectedHeap* g1h) : _g1h(g1h) { }
 119   bool do_object_b(oop obj);
 120 };
 121 
 122 // Represents the overflow mark stack used by concurrent marking.
 123 //
 124 // Stores oops in a huge buffer in virtual memory that is always fully committed.
 125 // Resizing may only happen during a STW pause when the stack is empty.
 126 //
 127 // Memory is allocated on a "chunk" basis, i.e. a set of oops. For this, the mark
 128 // stack memory is split into evenly sized chunks of oops. Users can only
 129 // add or remove entries on that basis.
 130 // Chunks are filled in increasing address order. Not completely filled chunks
 131 // have a NULL element as a terminating element.
 132 //
 133 // Every chunk has a header containing a single pointer element used for memory
 134 // management. This wastes some space, but is negligible (< .1% with current sizing).
 135 //
 136 // Memory management is done using a mix of tracking a high water-mark indicating
 137 // that all chunks at a lower address are valid chunks, and a singly linked free
 138 // list connecting all empty chunks.


< prev index next >