hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp
changeset 2881 74a1337e4acc
parent 2105 347008ce7984
child 2882 d508a8bac491
equal deleted inserted replaced
2748:986f111ef897 2881:74a1337e4acc
    24 
    24 
    25 // Forward decl
    25 // Forward decl
    26 class ConcurrentG1RefineThread;
    26 class ConcurrentG1RefineThread;
    27 class G1RemSet;
    27 class G1RemSet;
    28 
    28 
    29 // What to do after a yield:
       
    30 enum PostYieldAction {
       
    31   PYA_continue,  // Continue the traversal
       
    32   PYA_restart,   // Restart
       
    33   PYA_cancel     // It's been completed by somebody else: cancel.
       
    34 };
       
    35 
       
    36 class ConcurrentG1Refine: public CHeapObj {
    29 class ConcurrentG1Refine: public CHeapObj {
    37   ConcurrentG1RefineThread* _cg1rThread;
    30   ConcurrentG1RefineThread** _threads;
    38 
    31   int _n_threads;
    39   volatile jint _pya;
       
    40   PostYieldAction _last_pya;
       
    41 
       
    42   static bool _enabled;  // Protected by G1ConcRefine_mon.
       
    43   unsigned _traversals;
       
    44 
       
    45   // Number of cards processed during last refinement traversal.
       
    46   unsigned _first_traversal;
       
    47   unsigned _last_cards_during;
       
    48 
    32 
    49   // The cache for card refinement.
    33   // The cache for card refinement.
    50   bool     _use_cache;
    34   bool     _use_cache;
    51   bool     _def_use_cache;
    35   bool     _def_use_cache;
    52   size_t _n_periods;
    36   size_t _n_periods;
    72  public:
    56  public:
    73   ConcurrentG1Refine();
    57   ConcurrentG1Refine();
    74   ~ConcurrentG1Refine();
    58   ~ConcurrentG1Refine();
    75 
    59 
    76   void init(); // Accomplish some initialization that has to wait.
    60   void init(); // Accomplish some initialization that has to wait.
       
    61   void stop();
    77 
    62 
    78   // Enabled Conc refinement, waking up thread if necessary.
    63   // Iterate over the conc refine threads
    79   void enable();
    64   void threads_do(ThreadClosure *tc);
    80 
       
    81   // Returns the number of traversals performed since this refiner was enabled.
       
    82   unsigned disable();
       
    83 
       
    84   // Requires G1ConcRefine_mon to be held.
       
    85   bool enabled() { return _enabled; }
       
    86 
       
    87   // Returns only when G1 concurrent refinement has been enabled.
       
    88   void wait_for_ConcurrentG1Refine_enabled();
       
    89 
       
    90   // Do one concurrent refinement pass over the card table.  Returns "true"
       
    91   // if heuristics determine that another pass should be done immediately.
       
    92   bool refine();
       
    93 
       
    94   // Indicate that an in-progress refinement pass should start over.
       
    95   void set_pya_restart();
       
    96   // Indicate that an in-progress refinement pass should quit.
       
    97   void set_pya_cancel();
       
    98 
       
    99   // Get the appropriate post-yield action.  Also sets last_pya.
       
   100   PostYieldAction get_pya();
       
   101 
       
   102   // The last PYA read by "get_pya".
       
   103   PostYieldAction get_last_pya();
       
   104 
       
   105   bool do_traversal();
       
   106 
       
   107   ConcurrentG1RefineThread* cg1rThread() { return _cg1rThread; }
       
   108 
    65 
   109   // If this is the first entry for the slot, writes into the cache and
    66   // If this is the first entry for the slot, writes into the cache and
   110   // returns NULL.  If it causes an eviction, returns the evicted pointer.
    67   // returns NULL.  If it causes an eviction, returns the evicted pointer.
   111   // Otherwise, its a cache hit, and returns NULL.
    68   // Otherwise, its a cache hit, and returns NULL.
   112   jbyte* cache_insert(jbyte* card_ptr);
    69   jbyte* cache_insert(jbyte* card_ptr);