comparison src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp @ 2379:b099aaf51bf8

6962931: move interned strings out of the perm gen Reviewed-by: never, coleenp, ysr, jwilhelm
author jcoomes
date Tue, 22 Mar 2011 13:36:33 -0700
parents f95d63e2154a
children 1d1603768966
comparison
equal deleted inserted replaced
2378:924777755fad 2379:b099aaf51bf8
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);