< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahStrDedupQueue.hpp

Print this page
rev 57734 : 8236880: Shenandoah: Move string dedup cleanup into concurrent phase


  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHSTRDEDUPQUEUE_HPP
  26 #define SHARE_GC_SHENANDOAH_SHENANDOAHSTRDEDUPQUEUE_HPP
  27 
  28 #include "gc/shared/stringdedup/stringDedup.hpp"
  29 #include "gc/shenandoah/shenandoahHeap.hpp"
  30 #include "oops/oop.hpp"
  31 
  32 template <uint buffer_size>
  33 class ShenandoahOopBuffer : public CHeapObj<mtGC> {
  34 private:
  35   oop   _buf[buffer_size];
  36   uint  _index;
  37   ShenandoahOopBuffer<buffer_size>* _next;
  38 
  39 public:
  40   ShenandoahOopBuffer();
  41 
  42   bool is_full()  const;
  43   bool is_empty() const;
  44   uint size()     const;
  45 
  46   void push(oop obj);
  47   oop pop();
  48 
  49   void reset();
  50 
  51   void set_next(ShenandoahOopBuffer<buffer_size>* next);
  52   ShenandoahOopBuffer<buffer_size>* next() const;
  53 
  54   void unlink_or_oops_do(StringDedupUnlinkOrOopsDoClosure* cl);
  55   void oops_do(OopClosure* cl);




  56 };
  57 
  58 typedef ShenandoahOopBuffer<64> ShenandoahQueueBuffer;
  59 
  60 // Muti-producer and single consumer queue set
  61 class ShenandoahStrDedupQueue : public StringDedupQueue {
  62 private:
  63   ShenandoahQueueBuffer** _producer_queues;
  64   ShenandoahQueueBuffer*  _consumer_queue;
  65   size_t                  _num_producer_queue;
  66 
  67   // The queue is used for producers to publish completed buffers
  68   ShenandoahQueueBuffer* _published_queues;
  69 
  70   // Cached free buffers
  71   ShenandoahQueueBuffer* _free_list;
  72   size_t                 _num_free_buffer;
  73   const size_t           _max_free_buffer;
  74 
  75   bool                   _cancel;




  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHSTRDEDUPQUEUE_HPP
  26 #define SHARE_GC_SHENANDOAH_SHENANDOAHSTRDEDUPQUEUE_HPP
  27 
  28 #include "gc/shared/stringdedup/stringDedup.hpp"
  29 #include "gc/shenandoah/shenandoahHeap.hpp"
  30 #include "oops/oop.hpp"
  31 
  32 template <uint buffer_size>
  33 class ShenandoahOopBuffer : public CHeapObj<mtGC> {
  34 private:
  35   oop           _buf[buffer_size];
  36   volatile uint _index;
  37   ShenandoahOopBuffer<buffer_size>* _next;
  38 
  39 public:
  40   ShenandoahOopBuffer();
  41 
  42   bool is_full()  const;
  43   bool is_empty() const;
  44   uint size()     const;
  45 
  46   void push(oop obj);
  47   oop pop();
  48 
  49   void reset();
  50 
  51   void set_next(ShenandoahOopBuffer<buffer_size>* next);
  52   ShenandoahOopBuffer<buffer_size>* next() const;
  53 
  54   void unlink_or_oops_do(StringDedupUnlinkOrOopsDoClosure* cl);
  55   void oops_do(OopClosure* cl);
  56 
  57 private:
  58   uint index_acquire() const;
  59   void set_index_release(uint index);
  60 };
  61 
  62 typedef ShenandoahOopBuffer<64> ShenandoahQueueBuffer;
  63 
  64 // Muti-producer and single consumer queue set
  65 class ShenandoahStrDedupQueue : public StringDedupQueue {
  66 private:
  67   ShenandoahQueueBuffer** _producer_queues;
  68   ShenandoahQueueBuffer*  _consumer_queue;
  69   size_t                  _num_producer_queue;
  70 
  71   // The queue is used for producers to publish completed buffers
  72   ShenandoahQueueBuffer* _published_queues;
  73 
  74   // Cached free buffers
  75   ShenandoahQueueBuffer* _free_list;
  76   size_t                 _num_free_buffer;
  77   const size_t           _max_free_buffer;
  78 
  79   bool                   _cancel;


< prev index next >