< prev index next >

src/share/vm/gc/g1/dirtyCardQueue.hpp

Print this page
rev 10742 : Make fields used in lock-free algorithms volatile


  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_GC_G1_DIRTYCARDQUEUE_HPP
  26 #define SHARE_VM_GC_G1_DIRTYCARDQUEUE_HPP
  27 
  28 #include "gc/g1/ptrQueue.hpp"
  29 #include "memory/allocation.hpp"
  30 
  31 class FreeIdSet;
  32 class DirtyCardQueueSet;
  33 
  34 // A closure class for processing card table entries.  Note that we don't
  35 // require these closure objects to be stack-allocated.
  36 class CardTableEntryClosure: public CHeapObj<mtGC> {
  37 public:
  38   // Process the card whose card table entry is "card_ptr".  If returns
  39   // "false", terminate the iteration early.
  40   virtual bool do_card_ptr(jbyte* card_ptr, uint worker_i) = 0;
  41 };
  42 
  43 // A ptrQueue whose elements are "oops", pointers to object heads.
  44 class DirtyCardQueue: public PtrQueue {
  45 public:
  46   DirtyCardQueue(DirtyCardQueueSet* qset, bool permanent = false);
  47 
  48   // Flush before destroying; queue may be used to capture pending work while
  49   // doing something else, with auto-flush on completion.
  50   ~DirtyCardQueue();
  51 
  52   // Process queue entries and release resources.
  53   void flush() { flush_impl(); }
  54 
  55   void **get_buf() { return _buf;}
  56   size_t get_index() { return _index;}
  57   void reinitialize() { _buf = 0; _sz = 0; _index = 0;}
  58 
  59   // Compiler support.
  60   static ByteSize byte_offset_of_index() {




  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_GC_G1_DIRTYCARDQUEUE_HPP
  26 #define SHARE_VM_GC_G1_DIRTYCARDQUEUE_HPP
  27 
  28 #include "gc/g1/ptrQueue.hpp"
  29 #include "memory/allocation.hpp"
  30 
  31 class FreeIdSet;
  32 class DirtyCardQueueSet;
  33 
  34 // A closure class for processing card table entries.  Note that we don't
  35 // require these closure objects to be stack-allocated.
  36 class CardTableEntryClosure: public CHeapObj<mtGC> {
  37 public:
  38   // Process the card whose card table entry is "card_ptr".  If returns
  39   // "false", terminate the iteration early.
  40   virtual bool do_card_ptr(volatile jbyte* card_ptr, uint worker_i) = 0;
  41 };
  42 
  43 // A ptrQueue whose elements are "oops", pointers to object heads.
  44 class DirtyCardQueue: public PtrQueue {
  45 public:
  46   DirtyCardQueue(DirtyCardQueueSet* qset, bool permanent = false);
  47 
  48   // Flush before destroying; queue may be used to capture pending work while
  49   // doing something else, with auto-flush on completion.
  50   ~DirtyCardQueue();
  51 
  52   // Process queue entries and release resources.
  53   void flush() { flush_impl(); }
  54 
  55   void **get_buf() { return _buf;}
  56   size_t get_index() { return _index;}
  57   void reinitialize() { _buf = 0; _sz = 0; _index = 0;}
  58 
  59   // Compiler support.
  60   static ByteSize byte_offset_of_index() {


< prev index next >