src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp
Print this page
*** 170,179 ****
--- 170,180 ----
NOT_PRODUCT(ref_processor()->verify_no_references_recorded());
COMPILER2_PRESENT(DerivedPointerTable::clear());
ref_processor()->enable_discovery();
+ ref_processor()->snap_policy(clear_all_softrefs);
mark_sweep_phase1(clear_all_softrefs);
mark_sweep_phase2();
*** 515,538 ****
// Flush marking stack.
follow_stack();
// Process reference objects found during marking
{
! ReferencePolicy *soft_ref_policy;
! if (clear_all_softrefs) {
! soft_ref_policy = new AlwaysClearPolicy();
! } else {
! #ifdef COMPILER2
! soft_ref_policy = new LRUMaxHeapPolicy();
! #else
! soft_ref_policy = new LRUCurrentHeapPolicy();
! #endif // COMPILER2
! }
! assert(soft_ref_policy != NULL,"No soft reference policy");
ref_processor()->process_discovered_references(
! soft_ref_policy, is_alive_closure(), mark_and_push_closure(),
! follow_stack_closure(), NULL);
}
// Follow system dictionary roots and unload classes
bool purged_class = SystemDictionary::do_unloading(is_alive_closure());
--- 516,528 ----
// Flush marking stack.
follow_stack();
// Process reference objects found during marking
{
! ref_processor()->snap_policy(clear_all_softrefs);
ref_processor()->process_discovered_references(
! is_alive_closure(), mark_and_push_closure(), follow_stack_closure(), NULL);
}
// Follow system dictionary roots and unload classes
bool purged_class = SystemDictionary::do_unloading(is_alive_closure());