src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
Print this page
*** 328,337 ****
--- 328,338 ----
NOT_PRODUCT(reference_processor()->verify_no_references_recorded());
COMPILER2_PRESENT(DerivedPointerTable::clear());
reference_processor()->enable_discovery();
+ reference_processor()->snap_policy(false);
// We track how much was promoted to the next generation for
// the AdaptiveSizePolicy.
size_t old_gen_used_before = old_gen->used_in_bytes();
*** 392,419 ****
scavenge_midpoint.update();
// Process reference objects discovered during scavenge
{
! #ifdef COMPILER2
! ReferencePolicy *soft_ref_policy = new LRUMaxHeapPolicy();
! #else
! ReferencePolicy *soft_ref_policy = new LRUCurrentHeapPolicy();
! #endif // COMPILER2
!
PSKeepAliveClosure keep_alive(promotion_manager);
PSEvacuateFollowersClosure evac_followers(promotion_manager);
- assert(soft_ref_policy != NULL,"No soft reference policy");
if (reference_processor()->processing_is_mt()) {
PSRefProcTaskExecutor task_executor;
reference_processor()->process_discovered_references(
! soft_ref_policy, &_is_alive_closure, &keep_alive, &evac_followers,
! &task_executor);
} else {
reference_processor()->process_discovered_references(
! soft_ref_policy, &_is_alive_closure, &keep_alive, &evac_followers,
! NULL);
}
}
// Enqueue reference objects discovered during scavenge.
if (reference_processor()->processing_is_mt()) {
--- 393,412 ----
scavenge_midpoint.update();
// Process reference objects discovered during scavenge
{
! reference_processor()->snap_policy(false); // not always_clear
PSKeepAliveClosure keep_alive(promotion_manager);
PSEvacuateFollowersClosure evac_followers(promotion_manager);
if (reference_processor()->processing_is_mt()) {
PSRefProcTaskExecutor task_executor;
reference_processor()->process_discovered_references(
! &_is_alive_closure, &keep_alive, &evac_followers, &task_executor);
} else {
reference_processor()->process_discovered_references(
! &_is_alive_closure, &keep_alive, &evac_followers, NULL);
}
}
// Enqueue reference objects discovered during scavenge.
if (reference_processor()->processing_is_mt()) {