hotspot/src/share/vm/memory/referenceProcessor.hpp
changeset 10526 3e92f211533f
parent 10524 6594ca81279a
child 10670 4ea0e7d2ffbc
equal deleted inserted replaced
10525:5e44fe6a4262 10526:3e92f211533f
    50 class AbstractRefProcTaskExecutor;
    50 class AbstractRefProcTaskExecutor;
    51 class DiscoveredList;
    51 class DiscoveredList;
    52 
    52 
    53 class ReferenceProcessor : public CHeapObj {
    53 class ReferenceProcessor : public CHeapObj {
    54  protected:
    54  protected:
       
    55   // Compatibility with pre-4965777 JDK's
       
    56   static bool _pending_list_uses_discovered_field;
    55   MemRegion   _span; // (right-open) interval of heap
    57   MemRegion   _span; // (right-open) interval of heap
    56                      // subject to wkref discovery
    58                      // subject to wkref discovery
    57   bool        _discovering_refs;      // true when discovery enabled
    59   bool        _discovering_refs;      // true when discovery enabled
    58   bool        _discovery_is_atomic;   // if discovery is atomic wrt
    60   bool        _discovery_is_atomic;   // if discovery is atomic wrt
    59                                       // other collectors in configuration
    61                                       // other collectors in configuration
   109       _always_clear_soft_ref_policy : _default_soft_ref_policy;
   111       _always_clear_soft_ref_policy : _default_soft_ref_policy;
   110     _current_soft_ref_policy->setup();   // snapshot the policy threshold
   112     _current_soft_ref_policy->setup();   // snapshot the policy threshold
   111     return _current_soft_ref_policy;
   113     return _current_soft_ref_policy;
   112   }
   114   }
   113 
   115 
   114  public:
       
   115   // Process references with a certain reachability level.
   116   // Process references with a certain reachability level.
   116   void process_discovered_reflist(DiscoveredList               refs_lists[],
   117   void process_discovered_reflist(DiscoveredList               refs_lists[],
   117                                   ReferencePolicy*             policy,
   118                                   ReferencePolicy*             policy,
   118                                   bool                         clear_referent,
   119                                   bool                         clear_referent,
   119                                   BoolObjectClosure*           is_alive,
   120                                   BoolObjectClosure*           is_alive,
   295 
   296 
   296   // whether discovery is atomic wrt other collectors
   297   // whether discovery is atomic wrt other collectors
   297   bool discovery_is_atomic() const { return _discovery_is_atomic; }
   298   bool discovery_is_atomic() const { return _discovery_is_atomic; }
   298   void set_atomic_discovery(bool atomic) { _discovery_is_atomic = atomic; }
   299   void set_atomic_discovery(bool atomic) { _discovery_is_atomic = atomic; }
   299 
   300 
       
   301   // whether the JDK in which we are embedded is a pre-4965777 JDK,
       
   302   // and thus whether or not it uses the discovered field to chain
       
   303   // the entries in the pending list.
       
   304   static bool pending_list_uses_discovered_field() {
       
   305     return _pending_list_uses_discovered_field;
       
   306   }
       
   307 
   300   // whether discovery is done by multiple threads same-old-timeously
   308   // whether discovery is done by multiple threads same-old-timeously
   301   bool discovery_is_mt() const { return _discovery_is_mt; }
   309   bool discovery_is_mt() const { return _discovery_is_mt; }
   302   void set_mt_discovery(bool mt) { _discovery_is_mt = mt; }
   310   void set_mt_discovery(bool mt) { _discovery_is_mt = mt; }
   303 
   311 
   304   // Whether we are in a phase when _processing_ is MT.
   312   // Whether we are in a phase when _processing_ is MT.