227 // . the "clear all" policy
228 static ReferencePolicy* _always_clear_soft_ref_policy;
229 // . the current policy below is either one of the above
230 ReferencePolicy* _current_soft_ref_policy;
231
232 // The discovered ref lists themselves
233
234 // The active MT'ness degree of the queues below
235 uint _num_q;
236 // The maximum MT'ness degree of the queues below
237 uint _max_num_q;
238
239 // Master array of discovered oops
240 DiscoveredList* _discovered_refs;
241
242 // Arrays of lists of oops, one per thread (pointers into master array above)
243 DiscoveredList* _discoveredSoftRefs;
244 DiscoveredList* _discoveredWeakRefs;
245 DiscoveredList* _discoveredFinalRefs;
246 DiscoveredList* _discoveredPhantomRefs;
247 DiscoveredList* _discoveredCleanerRefs;
248
249 public:
250 static int number_of_subclasses_of_ref() { return (REF_CLEANER - REF_OTHER); }
251
252 uint num_q() { return _num_q; }
253 uint max_num_q() { return _max_num_q; }
254 void set_active_mt_degree(uint v) { _num_q = v; }
255
256 DiscoveredList* discovered_refs() { return _discovered_refs; }
257
258 ReferencePolicy* setup_policy(bool always_clear) {
259 _current_soft_ref_policy = always_clear ?
260 _always_clear_soft_ref_policy : _default_soft_ref_policy;
261 _current_soft_ref_policy->setup(); // snapshot the policy threshold
262 return _current_soft_ref_policy;
263 }
264
265 // Process references with a certain reachability level.
266 void process_discovered_reflist(DiscoveredList refs_lists[],
267 ReferencePolicy* policy,
268 bool clear_referent,
269 BoolObjectClosure* is_alive,
270 OopClosure* keep_alive,
|
227 // . the "clear all" policy
228 static ReferencePolicy* _always_clear_soft_ref_policy;
229 // . the current policy below is either one of the above
230 ReferencePolicy* _current_soft_ref_policy;
231
232 // The discovered ref lists themselves
233
234 // The active MT'ness degree of the queues below
235 uint _num_q;
236 // The maximum MT'ness degree of the queues below
237 uint _max_num_q;
238
239 // Master array of discovered oops
240 DiscoveredList* _discovered_refs;
241
242 // Arrays of lists of oops, one per thread (pointers into master array above)
243 DiscoveredList* _discoveredSoftRefs;
244 DiscoveredList* _discoveredWeakRefs;
245 DiscoveredList* _discoveredFinalRefs;
246 DiscoveredList* _discoveredPhantomRefs;
247
248 public:
249 static int number_of_subclasses_of_ref() { return (REF_PHANTOM - REF_OTHER); }
250
251 uint num_q() { return _num_q; }
252 uint max_num_q() { return _max_num_q; }
253 void set_active_mt_degree(uint v) { _num_q = v; }
254
255 DiscoveredList* discovered_refs() { return _discovered_refs; }
256
257 ReferencePolicy* setup_policy(bool always_clear) {
258 _current_soft_ref_policy = always_clear ?
259 _always_clear_soft_ref_policy : _default_soft_ref_policy;
260 _current_soft_ref_policy->setup(); // snapshot the policy threshold
261 return _current_soft_ref_policy;
262 }
263
264 // Process references with a certain reachability level.
265 void process_discovered_reflist(DiscoveredList refs_lists[],
266 ReferencePolicy* policy,
267 bool clear_referent,
268 BoolObjectClosure* is_alive,
269 OopClosure* keep_alive,
|