src/share/vm/gc_implementation/g1/g1MarkSweep.cpp

changeset 888
c96030fff130
parent 793
8651a65ac4b4
child 892
27a80744a83b
     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);

mercurial