hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp
changeset 8728 3f1bcd33068e
parent 7397 5b173b4ca846
child 8921 14bfe81f2a9d
equal deleted inserted replaced
8727:1642a45f024f 8728:3f1bcd33068e
    28 #include "gc_implementation/parallelScavenge/cardTableExtension.hpp"
    28 #include "gc_implementation/parallelScavenge/cardTableExtension.hpp"
    29 #include "gc_implementation/parallelScavenge/gcTaskManager.hpp"
    29 #include "gc_implementation/parallelScavenge/gcTaskManager.hpp"
    30 #include "gc_implementation/parallelScavenge/psMarkSweep.hpp"
    30 #include "gc_implementation/parallelScavenge/psMarkSweep.hpp"
    31 #include "gc_implementation/parallelScavenge/psPromotionManager.hpp"
    31 #include "gc_implementation/parallelScavenge/psPromotionManager.hpp"
    32 #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp"
    32 #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp"
    33 #include "gc_implementation/parallelScavenge/psScavenge.hpp"
    33 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp"
    34 #include "gc_implementation/parallelScavenge/psTasks.hpp"
    34 #include "gc_implementation/parallelScavenge/psTasks.hpp"
    35 #include "memory/iterator.hpp"
    35 #include "memory/iterator.hpp"
    36 #include "memory/universe.hpp"
    36 #include "memory/universe.hpp"
    37 #include "oops/oop.inline.hpp"
    37 #include "oops/oop.inline.hpp"
    38 #include "oops/oop.psgc.inline.hpp"
    38 #include "oops/oop.psgc.inline.hpp"
    43 #include "utilities/taskqueue.hpp"
    43 #include "utilities/taskqueue.hpp"
    44 
    44 
    45 //
    45 //
    46 // ScavengeRootsTask
    46 // ScavengeRootsTask
    47 //
    47 //
    48 
       
    49 // Define before use
       
    50 class PSScavengeRootsClosure: public OopClosure {
       
    51  private:
       
    52   PSPromotionManager* _promotion_manager;
       
    53 
       
    54  protected:
       
    55   template <class T> void do_oop_work(T *p) {
       
    56     if (PSScavenge::should_scavenge(p)) {
       
    57       // We never card mark roots, maybe call a func without test?
       
    58       PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p);
       
    59     }
       
    60   }
       
    61  public:
       
    62   PSScavengeRootsClosure(PSPromotionManager* pm) : _promotion_manager(pm) { }
       
    63   void do_oop(oop* p)       { PSScavengeRootsClosure::do_oop_work(p); }
       
    64   void do_oop(narrowOop* p) { PSScavengeRootsClosure::do_oop_work(p); }
       
    65 };
       
    66 
    48 
    67 void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
    49 void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
    68   assert(Universe::heap()->is_gc_active(), "called outside gc");
    50   assert(Universe::heap()->is_gc_active(), "called outside gc");
    69 
    51 
    70   PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which);
    52   PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which);