< prev index next >

src/hotspot/share/gc/shared/referenceProcessor.hpp

Print this page
rev 49944 : imported patch 8201492-properly-implement-non-contiguous-reference-processing
rev 49945 : imported patch 8201492-stefanj-review
rev 49946 : imported patch 8201492-kim-review
rev 49949 : imported patch 8202021-cleanup-referenceprocessor
rev 49950 : imported patch 8202021-stefanj-review
rev 49951 : imported patch 8202017-reference-processor-remove-enqueue
rev 49953 : imported patch 8201491-precleaning
rev 49954 : [mq]: 8201491-kbarrett-review

*** 277,314 **** bool clear_referent, BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc); ! // "Preclean" all the discovered reference lists ! // by removing references with strongly reachable referents. // The first argument is a predicate on an oop that indicates ! // its (strong) reachability and the second is a closure that // may be used to incrementalize or abort the precleaning process. // The caller is responsible for taking care of potential // interference with concurrent operations on these lists ! // (or predicates involved) by other threads. Currently ! // only used by the CMS collector. void preclean_discovered_references(BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc, YieldClosure* yield, GCTimer* gc_timer); // Returns the name of the discovered reference list // occupying the i / _num_queues slot. const char* list_name(uint i); ! // "Preclean" the given discovered reference list ! // by removing references with strongly reachable referents. ! // Currently used in support of CMS only. ! void preclean_discovered_reflist(DiscoveredList& refs_list, BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc, YieldClosure* yield); ! private: // round-robin mod _num_queues (not: _not_ mod _max_num_queues) uint next_id() { uint id = _next_id; assert(!_discovery_is_mt, "Round robin should only be used in serial discovery"); if (++_next_id == _num_queues) { --- 277,316 ---- bool clear_referent, BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc); ! // "Preclean" all the discovered reference lists by removing references that ! // are active (e.g. due to the mutator calling enqueue()) or with NULL or ! // strongly reachable referents. // The first argument is a predicate on an oop that indicates ! // its (strong) reachability and the fourth is a closure that // may be used to incrementalize or abort the precleaning process. // The caller is responsible for taking care of potential // interference with concurrent operations on these lists ! // (or predicates involved) by other threads. void preclean_discovered_references(BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc, YieldClosure* yield, GCTimer* gc_timer); // Returns the name of the discovered reference list // occupying the i / _num_queues slot. const char* list_name(uint i); ! private: ! // "Preclean" the given discovered reference list by removing references with ! // the attributes mentioned in preclean_discovered_references(). ! // Supports both normal and fine grain yielding. ! // Returns whether the operation should be aborted. ! bool preclean_discovered_reflist(DiscoveredList& refs_list, BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc, YieldClosure* yield); ! // round-robin mod _num_queues (not: _not_ mod _max_num_queues) uint next_id() { uint id = _next_id; assert(!_discovery_is_mt, "Round robin should only be used in serial discovery"); if (++_next_id == _num_queues) {
*** 321,331 **** inline void add_to_discovered_list_mt(DiscoveredList& refs_list, oop obj, HeapWord* discovered_addr); void clear_discovered_references(DiscoveredList& refs_list); ! void log_reflist_counts(DiscoveredList ref_lists[], uint active_length, size_t total_count) PRODUCT_RETURN; // Balances reference queues. void balance_queues(DiscoveredList ref_lists[]); // Update (advance) the soft ref master clock field. --- 323,334 ---- inline void add_to_discovered_list_mt(DiscoveredList& refs_list, oop obj, HeapWord* discovered_addr); void clear_discovered_references(DiscoveredList& refs_list); ! void log_reflist(const char* prefix, DiscoveredList list[], uint num_active_queues); ! void log_reflist_counts(DiscoveredList ref_lists[], uint num_active_queues) PRODUCT_RETURN; // Balances reference queues. void balance_queues(DiscoveredList ref_lists[]); // Update (advance) the soft ref master clock field.
< prev index next >