src/hotspot/share/gc/shared/collectorPolicy.hpp
changeset 49047 8f004146e407
parent 49046 c8e4dc1b9e39
child 49048 4e8c86b75428
equal deleted inserted replaced
49046:c8e4dc1b9e39 49047:8f004146e407
    70   size_t _min_heap_byte_size;
    70   size_t _min_heap_byte_size;
    71 
    71 
    72   size_t _space_alignment;
    72   size_t _space_alignment;
    73   size_t _heap_alignment;
    73   size_t _heap_alignment;
    74 
    74 
    75   // Set to true when policy wants soft refs cleared.
       
    76   // Reset to false by gc after it clears all soft refs.
       
    77   bool _should_clear_all_soft_refs;
       
    78 
       
    79   // Set to true by the GC if the just-completed gc cleared all
       
    80   // softrefs.  This is set to true whenever a gc clears all softrefs, and
       
    81   // set to false each time gc returns to the mutator.  For example, in the
       
    82   // ParallelScavengeHeap case the latter would be done toward the end of
       
    83   // mem_allocate() where it returns op.result()
       
    84   bool _all_soft_refs_clear;
       
    85 
       
    86   CollectorPolicy();
    75   CollectorPolicy();
    87 
    76 
    88  public:
    77  public:
    89   virtual void initialize_all() {
    78   virtual void initialize_all() {
    90     initialize_alignments();
    79     initialize_alignments();
    99   size_t heap_alignment()         { return _heap_alignment; }
    88   size_t heap_alignment()         { return _heap_alignment; }
   100 
    89 
   101   size_t initial_heap_byte_size() { return _initial_heap_byte_size; }
    90   size_t initial_heap_byte_size() { return _initial_heap_byte_size; }
   102   size_t max_heap_byte_size()     { return _max_heap_byte_size; }
    91   size_t max_heap_byte_size()     { return _max_heap_byte_size; }
   103   size_t min_heap_byte_size()     { return _min_heap_byte_size; }
    92   size_t min_heap_byte_size()     { return _min_heap_byte_size; }
   104 
       
   105   bool should_clear_all_soft_refs() { return _should_clear_all_soft_refs; }
       
   106   void set_should_clear_all_soft_refs(bool v) { _should_clear_all_soft_refs = v; }
       
   107   // Returns the current value of _should_clear_all_soft_refs.
       
   108   // _should_clear_all_soft_refs is set to false as a side effect.
       
   109   bool use_should_clear_all_soft_refs(bool v);
       
   110   bool all_soft_refs_clear() { return _all_soft_refs_clear; }
       
   111   void set_all_soft_refs_clear(bool v) { _all_soft_refs_clear = v; }
       
   112 
       
   113   // Called by the GC after Soft Refs have been cleared to indicate
       
   114   // that the request in _should_clear_all_soft_refs has been fulfilled.
       
   115   virtual void cleared_all_soft_refs();
       
   116 };
       
   117 
       
   118 class ClearedAllSoftRefs : public StackObj {
       
   119   bool _clear_all_soft_refs;
       
   120   CollectorPolicy* _collector_policy;
       
   121  public:
       
   122   ClearedAllSoftRefs(bool clear_all_soft_refs,
       
   123                      CollectorPolicy* collector_policy) :
       
   124     _clear_all_soft_refs(clear_all_soft_refs),
       
   125     _collector_policy(collector_policy) {}
       
   126 
       
   127   ~ClearedAllSoftRefs() {
       
   128     if (_clear_all_soft_refs) {
       
   129       _collector_policy->cleared_all_soft_refs();
       
   130     }
       
   131   }
       
   132 
       
   133   bool should_clear() { return _clear_all_soft_refs; }
       
   134 };
    93 };
   135 
    94 
   136 class GenCollectorPolicy : public CollectorPolicy {
    95 class GenCollectorPolicy : public CollectorPolicy {
   137   friend class TestGenCollectorPolicy;
    96   friend class TestGenCollectorPolicy;
   138   friend class VMStructs;
    97   friend class VMStructs;
   217   AdaptiveSizePolicy* size_policy() { return _size_policy; }
   176   AdaptiveSizePolicy* size_policy() { return _size_policy; }
   218 
   177 
   219   virtual void initialize_size_policy(size_t init_eden_size,
   178   virtual void initialize_size_policy(size_t init_eden_size,
   220                                       size_t init_promo_size,
   179                                       size_t init_promo_size,
   221                                       size_t init_survivor_size);
   180                                       size_t init_survivor_size);
   222 
       
   223   virtual void cleared_all_soft_refs();
       
   224 
       
   225 };
   181 };
   226 
   182 
   227 class MarkSweepPolicy : public GenCollectorPolicy {
   183 class MarkSweepPolicy : public GenCollectorPolicy {
   228  protected:
   184  protected:
   229   void initialize_alignments();
   185   void initialize_alignments();