hotspot/src/share/vm/memory/referenceProcessor.hpp
changeset 28212 647b7d0efb88
parent 25350 6423a57e5451
child 28510 4f1d3611e0bc
equal deleted inserted replaced
28211:f3a2bc065255 28212:647b7d0efb88
   351                                       VoidClosure*       complete_gc,
   351                                       VoidClosure*       complete_gc,
   352                                       YieldClosure*      yield,
   352                                       YieldClosure*      yield,
   353                                       GCTimer*           gc_timer,
   353                                       GCTimer*           gc_timer,
   354                                       GCId               gc_id);
   354                                       GCId               gc_id);
   355 
   355 
   356   // Delete entries in the discovered lists that have
       
   357   // either a null referent or are not active. Such
       
   358   // Reference objects can result from the clearing
       
   359   // or enqueueing of Reference objects concurrent
       
   360   // with their discovery by a (concurrent) collector.
       
   361   // For a definition of "active" see java.lang.ref.Reference;
       
   362   // Refs are born active, become inactive when enqueued,
       
   363   // and never become active again. The state of being
       
   364   // active is encoded as follows: A Ref is active
       
   365   // if and only if its "next" field is NULL.
       
   366   void clean_up_discovered_references();
       
   367   void clean_up_discovered_reflist(DiscoveredList& refs_list);
       
   368 
       
   369   // Returns the name of the discovered reference list
   356   // Returns the name of the discovered reference list
   370   // occupying the i / _num_q slot.
   357   // occupying the i / _num_q slot.
   371   const char* list_name(uint i);
   358   const char* list_name(uint i);
   372 
   359 
   373   void enqueue_discovered_reflists(HeapWord* pending_list_addr, AbstractRefProcTaskExecutor* task_executor);
   360   void enqueue_discovered_reflists(HeapWord* pending_list_addr, AbstractRefProcTaskExecutor* task_executor);
   437   // get and set span
   424   // get and set span
   438   MemRegion span()                   { return _span; }
   425   MemRegion span()                   { return _span; }
   439   void      set_span(MemRegion span) { _span = span; }
   426   void      set_span(MemRegion span) { _span = span; }
   440 
   427 
   441   // start and stop weak ref discovery
   428   // start and stop weak ref discovery
   442   void enable_discovery(bool verify_disabled, bool check_no_refs);
   429   void enable_discovery(bool check_no_refs = true);
   443   void disable_discovery()  { _discovering_refs = false; }
   430   void disable_discovery()  { _discovering_refs = false; }
   444   bool discovery_enabled()  { return _discovering_refs;  }
   431   bool discovery_enabled()  { return _discovering_refs;  }
   445 
   432 
   446   // whether discovery is atomic wrt other collectors
   433   // whether discovery is atomic wrt other collectors
   447   bool discovery_is_atomic() const { return _discovery_is_atomic; }
   434   bool discovery_is_atomic() const { return _discovery_is_atomic; }
   515     }
   502     }
   516   }
   503   }
   517 
   504 
   518   ~NoRefDiscovery() {
   505   ~NoRefDiscovery() {
   519     if (_was_discovering_refs) {
   506     if (_was_discovering_refs) {
   520       _rp->enable_discovery(true /*verify_disabled*/, false /*check_no_refs*/);
   507       _rp->enable_discovery(false /*check_no_refs*/);
   521     }
   508     }
   522   }
   509   }
   523 };
   510 };
   524 
   511 
   525 
   512