245 BoolObjectClosure* is_alive,
246 OopClosure* keep_alive,
247 VoidClosure* complete_gc,
248 AbstractRefProcTaskExecutor* task_executor,
249 ReferenceProcessorPhaseTimes* phase_times);
250
251 // Work methods used by the method process_discovered_reflist
252 // Phase1: keep alive all those referents that are otherwise
253 // dead but which must be kept alive by policy (and their closure).
254 void process_phase1(DiscoveredList& refs_list,
255 ReferencePolicy* policy,
256 BoolObjectClosure* is_alive,
257 OopClosure* keep_alive,
258 VoidClosure* complete_gc);
259 // Phase2: remove all those references whose referents are
260 // reachable.
261 void process_phase2(DiscoveredList& refs_list,
262 BoolObjectClosure* is_alive,
263 OopClosure* keep_alive,
264 VoidClosure* complete_gc);
265 // Work methods in support of process_phase2
266 void pp2_work(DiscoveredList& refs_list,
267 BoolObjectClosure* is_alive,
268 OopClosure* keep_alive);
269 void pp2_work_concurrent_discovery(
270 DiscoveredList& refs_list,
271 BoolObjectClosure* is_alive,
272 OopClosure* keep_alive,
273 VoidClosure* complete_gc);
274 // Phase3: process the referents by either clearing them
275 // or keeping them alive (and their closure), and enqueuing them.
276 void process_phase3(DiscoveredList& refs_list,
277 bool clear_referent,
278 BoolObjectClosure* is_alive,
279 OopClosure* keep_alive,
280 VoidClosure* complete_gc);
281
282 // "Preclean" all the discovered reference lists
283 // by removing references with strongly reachable referents.
284 // The first argument is a predicate on an oop that indicates
285 // its (strong) reachability and the second is a closure that
286 // may be used to incrementalize or abort the precleaning process.
287 // The caller is responsible for taking care of potential
288 // interference with concurrent operations on these lists
289 // (or predicates involved) by other threads. Currently
290 // only used by the CMS collector.
291 void preclean_discovered_references(BoolObjectClosure* is_alive,
292 OopClosure* keep_alive,
293 VoidClosure* complete_gc,
|
245 BoolObjectClosure* is_alive,
246 OopClosure* keep_alive,
247 VoidClosure* complete_gc,
248 AbstractRefProcTaskExecutor* task_executor,
249 ReferenceProcessorPhaseTimes* phase_times);
250
251 // Work methods used by the method process_discovered_reflist
252 // Phase1: keep alive all those referents that are otherwise
253 // dead but which must be kept alive by policy (and their closure).
254 void process_phase1(DiscoveredList& refs_list,
255 ReferencePolicy* policy,
256 BoolObjectClosure* is_alive,
257 OopClosure* keep_alive,
258 VoidClosure* complete_gc);
259 // Phase2: remove all those references whose referents are
260 // reachable.
261 void process_phase2(DiscoveredList& refs_list,
262 BoolObjectClosure* is_alive,
263 OopClosure* keep_alive,
264 VoidClosure* complete_gc);
265 // Phase3: process the referents by either clearing them
266 // or keeping them alive (and their closure), and enqueuing them.
267 void process_phase3(DiscoveredList& refs_list,
268 bool clear_referent,
269 BoolObjectClosure* is_alive,
270 OopClosure* keep_alive,
271 VoidClosure* complete_gc);
272
273 // "Preclean" all the discovered reference lists
274 // by removing references with strongly reachable referents.
275 // The first argument is a predicate on an oop that indicates
276 // its (strong) reachability and the second is a closure that
277 // may be used to incrementalize or abort the precleaning process.
278 // The caller is responsible for taking care of potential
279 // interference with concurrent operations on these lists
280 // (or predicates involved) by other threads. Currently
281 // only used by the CMS collector.
282 void preclean_discovered_references(BoolObjectClosure* is_alive,
283 OopClosure* keep_alive,
284 VoidClosure* complete_gc,
|