1.1 --- a/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Nov 20 12:27:41 2008 -0800 1.2 +++ b/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Nov 20 16:56:09 2008 -0800 1.3 @@ -33,8 +33,9 @@ 1.4 1.5 // hook up weak ref data so it can be used during Mark-Sweep 1.6 assert(GenMarkSweep::ref_processor() == NULL, "no stomping"); 1.7 + assert(rp != NULL, "should be non-NULL"); 1.8 GenMarkSweep::_ref_processor = rp; 1.9 - assert(rp != NULL, "should be non-NULL"); 1.10 + rp->snap_policy(clear_all_softrefs); 1.11 1.12 // When collecting the permanent generation methodOops may be moving, 1.13 // so we either have to flush all bcp data or convert it into bci. 1.14 @@ -121,23 +122,12 @@ 1.15 &GenMarkSweep::follow_root_closure); 1.16 1.17 // Process reference objects found during marking 1.18 - ReferencePolicy *soft_ref_policy; 1.19 - if (clear_all_softrefs) { 1.20 - soft_ref_policy = new AlwaysClearPolicy(); 1.21 - } else { 1.22 -#ifdef COMPILER2 1.23 - soft_ref_policy = new LRUMaxHeapPolicy(); 1.24 -#else 1.25 - soft_ref_policy = new LRUCurrentHeapPolicy(); 1.26 -#endif 1.27 - } 1.28 - assert(soft_ref_policy != NULL,"No soft reference policy"); 1.29 - GenMarkSweep::ref_processor()->process_discovered_references( 1.30 - soft_ref_policy, 1.31 - &GenMarkSweep::is_alive, 1.32 - &GenMarkSweep::keep_alive, 1.33 - &GenMarkSweep::follow_stack_closure, 1.34 - NULL); 1.35 + ReferenceProcessor* rp = GenMarkSweep::ref_processor(); 1.36 + rp->snap_policy(clear_all_softrefs); 1.37 + rp->process_discovered_references(&GenMarkSweep::is_alive, 1.38 + &GenMarkSweep::keep_alive, 1.39 + &GenMarkSweep::follow_stack_closure, 1.40 + NULL); 1.41 1.42 // Follow system dictionary roots and unload classes 1.43 bool purged_class = SystemDictionary::do_unloading(&GenMarkSweep::is_alive);