equal
deleted
inserted
replaced
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); |