347 BoolObjectClosure* is_alive,
348 OopClosure* keep_alive,
349 VoidClosure* complete_gc,
350 YieldClosure* yield);
351
352 // round-robin mod _num_q (not: _not_ mode _max_num_q)
353 uint next_id() {
354 uint id = _next_id;
355 if (++_next_id == _num_q) {
356 _next_id = 0;
357 }
358 return id;
359 }
360 DiscoveredList* get_discovered_list(ReferenceType rt);
361 inline void add_to_discovered_list_mt(DiscoveredList& refs_list, oop obj,
362 HeapWord* discovered_addr);
363
364 void clear_discovered_references(DiscoveredList& refs_list);
365
366 // Calculate the number of jni handles.
367 unsigned int count_jni_refs();
368
369 // Balances reference queues.
370 void balance_queues(DiscoveredList ref_lists[]);
371
372 // Update (advance) the soft ref master clock field.
373 void update_soft_ref_master_clock();
374
375 public:
376 // Default parameters give you a vanilla reference processor.
377 ReferenceProcessor(MemRegion span,
378 bool mt_processing = false, uint mt_processing_degree = 1,
379 bool mt_discovery = false, uint mt_discovery_degree = 1,
380 bool atomic_discovery = true,
381 BoolObjectClosure* is_alive_non_header = NULL);
382
383 // RefDiscoveryPolicy values
384 enum DiscoveryPolicy {
385 ReferenceBasedDiscovery = 0,
386 ReferentBasedDiscovery = 1,
387 DiscoveryPolicyMin = ReferenceBasedDiscovery,
|
347 BoolObjectClosure* is_alive,
348 OopClosure* keep_alive,
349 VoidClosure* complete_gc,
350 YieldClosure* yield);
351
352 // round-robin mod _num_q (not: _not_ mode _max_num_q)
353 uint next_id() {
354 uint id = _next_id;
355 if (++_next_id == _num_q) {
356 _next_id = 0;
357 }
358 return id;
359 }
360 DiscoveredList* get_discovered_list(ReferenceType rt);
361 inline void add_to_discovered_list_mt(DiscoveredList& refs_list, oop obj,
362 HeapWord* discovered_addr);
363
364 void clear_discovered_references(DiscoveredList& refs_list);
365
366 // Calculate the number of jni handles.
367 size_t count_jni_refs();
368
369 void log_reflist_counts(DiscoveredList ref_lists[], size_t total_count) PRODUCT_RETURN;
370
371 // Balances reference queues.
372 void balance_queues(DiscoveredList ref_lists[]);
373
374 // Update (advance) the soft ref master clock field.
375 void update_soft_ref_master_clock();
376
377 public:
378 // Default parameters give you a vanilla reference processor.
379 ReferenceProcessor(MemRegion span,
380 bool mt_processing = false, uint mt_processing_degree = 1,
381 bool mt_discovery = false, uint mt_discovery_degree = 1,
382 bool atomic_discovery = true,
383 BoolObjectClosure* is_alive_non_header = NULL);
384
385 // RefDiscoveryPolicy values
386 enum DiscoveryPolicy {
387 ReferenceBasedDiscovery = 0,
388 ReferentBasedDiscovery = 1,
389 DiscoveryPolicyMin = ReferenceBasedDiscovery,
|