45 ZPhantomIsAliveObjectClosure is_alive;
46 ZPhantomKeepAliveOopClosure keep_alive;
47 _weak_roots.weak_oops_do(&is_alive, &keep_alive);
48 }
49 };
50
51 void ZWeakRootsProcessor::process_weak_roots() {
52 ZProcessWeakRootsTask task;
53 _workers->run_parallel(&task);
54 }
55
56 class ZProcessConcurrentWeakRootsTask : public ZTask {
57 private:
58 ZConcurrentWeakRootsIterator _concurrent_weak_roots;
59
60 public:
61 ZProcessConcurrentWeakRootsTask() :
62 ZTask("ZProcessConccurentWeakRootsTask"),
63 _concurrent_weak_roots() {}
64
65 virtual void work() {
66 ZPhantomCleanOopClosure cl;
67 _concurrent_weak_roots.oops_do(&cl);
68 }
69 };
70
71 void ZWeakRootsProcessor::process_concurrent_weak_roots() {
72 ZProcessConcurrentWeakRootsTask task;
73 _workers->run_concurrent(&task);
74 }
|
45 ZPhantomIsAliveObjectClosure is_alive;
46 ZPhantomKeepAliveOopClosure keep_alive;
47 _weak_roots.weak_oops_do(&is_alive, &keep_alive);
48 }
49 };
50
51 void ZWeakRootsProcessor::process_weak_roots() {
52 ZProcessWeakRootsTask task;
53 _workers->run_parallel(&task);
54 }
55
56 class ZProcessConcurrentWeakRootsTask : public ZTask {
57 private:
58 ZConcurrentWeakRootsIterator _concurrent_weak_roots;
59
60 public:
61 ZProcessConcurrentWeakRootsTask() :
62 ZTask("ZProcessConccurentWeakRootsTask"),
63 _concurrent_weak_roots() {}
64
65 ~ZProcessConcurrentWeakRootsTask() {
66 _concurrent_weak_roots.notify();
67 }
68
69 virtual void work() {
70 ZPhantomCleanOopClosure cl;
71 _concurrent_weak_roots.oops_do(&cl);
72 }
73 };
74
75 void ZWeakRootsProcessor::process_concurrent_weak_roots() {
76 ZProcessConcurrentWeakRootsTask task;
77 _workers->run_concurrent(&task);
78 }
|