src/share/vm/memory/referenceProcessor.hpp

changeset 888
c96030fff130
parent 791
1ee8caae33af
child 892
27a80744a83b
equal deleted inserted replaced
887:00b023ae2d78 888:c96030fff130
21 * have any questions. 21 * have any questions.
22 * 22 *
23 */ 23 */
24 24
25 // ReferenceProcessor class encapsulates the per-"collector" processing 25 // ReferenceProcessor class encapsulates the per-"collector" processing
26 // of "weak" references for GC. The interface is useful for supporting 26 // of java.lang.Reference objects for GC. The interface is useful for supporting
27 // a generational abstraction, in particular when there are multiple 27 // a generational abstraction, in particular when there are multiple
28 // generations that are being independently collected -- possibly 28 // generations that are being independently collected -- possibly
29 // concurrently and/or incrementally. Note, however, that the 29 // concurrently and/or incrementally. Note, however, that the
30 // ReferenceProcessor class abstracts away from a generational setting 30 // ReferenceProcessor class abstracts away from a generational setting
31 // by using only a heap interval (called "span" below), thus allowing 31 // by using only a heap interval (called "span" below), thus allowing
73 // helps the reference processor determine the reachability 73 // helps the reference processor determine the reachability
74 // of an oop (the field is currently initialized to NULL for 74 // of an oop (the field is currently initialized to NULL for
75 // all collectors but the CMS collector). 75 // all collectors but the CMS collector).
76 BoolObjectClosure* _is_alive_non_header; 76 BoolObjectClosure* _is_alive_non_header;
77 77
78 // Soft ref clearing policies
79 // . the default policy
80 static ReferencePolicy* _default_soft_ref_policy;
81 // . the "clear all" policy
82 static ReferencePolicy* _always_clear_soft_ref_policy;
83 // . the current policy below is either one of the above
84 ReferencePolicy* _current_soft_ref_policy;
85
78 // The discovered ref lists themselves 86 // The discovered ref lists themselves
79 87
80 // The MT'ness degree of the queues below 88 // The MT'ness degree of the queues below
81 int _num_q; 89 int _num_q;
82 // Arrays of lists of oops, one per thread 90 // Arrays of lists of oops, one per thread
88 public: 96 public:
89 int num_q() { return _num_q; } 97 int num_q() { return _num_q; }
90 DiscoveredList* discovered_soft_refs() { return _discoveredSoftRefs; } 98 DiscoveredList* discovered_soft_refs() { return _discoveredSoftRefs; }
91 static oop sentinel_ref() { return _sentinelRef; } 99 static oop sentinel_ref() { return _sentinelRef; }
92 static oop* adr_sentinel_ref() { return &_sentinelRef; } 100 static oop* adr_sentinel_ref() { return &_sentinelRef; }
101 ReferencePolicy* snap_policy(bool always_clear) {
102 _current_soft_ref_policy = always_clear ?
103 _always_clear_soft_ref_policy : _default_soft_ref_policy;
104 _current_soft_ref_policy->snap(); // snapshot the policy threshold
105 return _current_soft_ref_policy;
106 }
93 107
94 public: 108 public:
95 // Process references with a certain reachability level. 109 // Process references with a certain reachability level.
96 void process_discovered_reflist(DiscoveredList refs_lists[], 110 void process_discovered_reflist(DiscoveredList refs_lists[],
97 ReferencePolicy* policy, 111 ReferencePolicy* policy,
295 309
296 // Discover a Reference object, using appropriate discovery criteria 310 // Discover a Reference object, using appropriate discovery criteria
297 bool discover_reference(oop obj, ReferenceType rt); 311 bool discover_reference(oop obj, ReferenceType rt);
298 312
299 // Process references found during GC (called by the garbage collector) 313 // Process references found during GC (called by the garbage collector)
300 void process_discovered_references(ReferencePolicy* policy, 314 void process_discovered_references(BoolObjectClosure* is_alive,
301 BoolObjectClosure* is_alive,
302 OopClosure* keep_alive, 315 OopClosure* keep_alive,
303 VoidClosure* complete_gc, 316 VoidClosure* complete_gc,
304 AbstractRefProcTaskExecutor* task_executor); 317 AbstractRefProcTaskExecutor* task_executor);
305 318
306 public: 319 public:

mercurial