src/share/vm/gc_implementation/parNew/parNewGeneration.cpp
Print this page
*** 760,797 ****
thread_state_set.pops()+thread_state_set.steals());
}
assert(thread_state_set.pushes() == thread_state_set.pops() + thread_state_set.steals(),
"Or else the queues are leaky.");
- // For now, process discovered weak refs sequentially.
- #ifdef COMPILER2
- ReferencePolicy *soft_ref_policy = new LRUMaxHeapPolicy();
- #else
- ReferencePolicy *soft_ref_policy = new LRUCurrentHeapPolicy();
- #endif // COMPILER2
-
// Process (weak) reference objects found during scavenge.
IsAliveClosure is_alive(this);
ScanWeakRefClosure scan_weak_ref(this);
KeepAliveClosure keep_alive(&scan_weak_ref);
ScanClosure scan_without_gc_barrier(this, false);
ScanClosureWithParBarrier scan_with_gc_barrier(this, true);
set_promo_failure_scan_stack_closure(&scan_without_gc_barrier);
EvacuateFollowersClosureGeneral evacuate_followers(gch, _level,
&scan_without_gc_barrier, &scan_with_gc_barrier);
! if (ref_processor()->processing_is_mt()) {
ParNewRefProcTaskExecutor task_executor(*this, thread_state_set);
! ref_processor()->process_discovered_references(
! soft_ref_policy, &is_alive, &keep_alive, &evacuate_followers,
! &task_executor);
} else {
thread_state_set.flush();
gch->set_par_threads(0); // 0 ==> non-parallel.
gch->save_marks();
! ref_processor()->process_discovered_references(
! soft_ref_policy, &is_alive, &keep_alive, &evacuate_followers,
! NULL);
}
if (!promotion_failed()) {
// Swap the survivor spaces.
eden()->clear(SpaceDecorator::Mangle);
from()->clear(SpaceDecorator::Mangle);
--- 760,788 ----
thread_state_set.pops()+thread_state_set.steals());
}
assert(thread_state_set.pushes() == thread_state_set.pops() + thread_state_set.steals(),
"Or else the queues are leaky.");
// Process (weak) reference objects found during scavenge.
+ ReferenceProcessor* rp = ref_processor();
IsAliveClosure is_alive(this);
ScanWeakRefClosure scan_weak_ref(this);
KeepAliveClosure keep_alive(&scan_weak_ref);
ScanClosure scan_without_gc_barrier(this, false);
ScanClosureWithParBarrier scan_with_gc_barrier(this, true);
set_promo_failure_scan_stack_closure(&scan_without_gc_barrier);
EvacuateFollowersClosureGeneral evacuate_followers(gch, _level,
&scan_without_gc_barrier, &scan_with_gc_barrier);
! rp->snap_policy(clear_all_soft_refs);
! if (rp->processing_is_mt()) {
ParNewRefProcTaskExecutor task_executor(*this, thread_state_set);
! rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers, &task_executor);
} else {
thread_state_set.flush();
gch->set_par_threads(0); // 0 ==> non-parallel.
gch->save_marks();
! rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers, NULL);
}
if (!promotion_failed()) {
// Swap the survivor spaces.
eden()->clear(SpaceDecorator::Mangle);
from()->clear(SpaceDecorator::Mangle);
*** 849,866 ****
update_time_of_last_gc(os::javaTimeMillis());
SpecializationStats::print();
! ref_processor()->set_enqueuing_is_done(true);
! if (ref_processor()->processing_is_mt()) {
ParNewRefProcTaskExecutor task_executor(*this, thread_state_set);
! ref_processor()->enqueue_discovered_references(&task_executor);
} else {
! ref_processor()->enqueue_discovered_references(NULL);
}
! ref_processor()->verify_no_references_recorded();
}
static int sum;
void ParNewGeneration::waste_some_time() {
for (int i = 0; i < 100; i++) {
--- 840,857 ----
update_time_of_last_gc(os::javaTimeMillis());
SpecializationStats::print();
! rp->set_enqueuing_is_done(true);
! if (rp->processing_is_mt()) {
ParNewRefProcTaskExecutor task_executor(*this, thread_state_set);
! rp->enqueue_discovered_references(&task_executor);
} else {
! rp->enqueue_discovered_references(NULL);
}
! rp->verify_no_references_recorded();
}
static int sum;
void ParNewGeneration::waste_some_time() {
for (int i = 0; i < 100; i++) {