comparison src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp @ 113:ba764ed4b6f2

6420645: Create a vm that uses compressed oops for up to 32gb heapsizes Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author coleenp
date Sun, 13 Apr 2008 17:43:42 -0400
parents a61af66fc99e
children d1605aabd0a1
comparison
equal deleted inserted replaced
110:a49a647afe9a 113:ba764ed4b6f2
32 // Define before use 32 // Define before use
33 class PSScavengeRootsClosure: public OopClosure { 33 class PSScavengeRootsClosure: public OopClosure {
34 private: 34 private:
35 PSPromotionManager* _promotion_manager; 35 PSPromotionManager* _promotion_manager;
36 36
37 protected:
38 template <class T> void do_oop_work(T *p) {
39 if (PSScavenge::should_scavenge(p)) {
40 // We never card mark roots, maybe call a func without test?
41 PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p);
42 }
43 }
37 public: 44 public:
38 PSScavengeRootsClosure(PSPromotionManager* pm) : _promotion_manager(pm) { } 45 PSScavengeRootsClosure(PSPromotionManager* pm) : _promotion_manager(pm) { }
39 46 void do_oop(oop* p) { PSScavengeRootsClosure::do_oop_work(p); }
40 virtual void do_oop(oop* p) { 47 void do_oop(narrowOop* p) { PSScavengeRootsClosure::do_oop_work(p); }
41 if (PSScavenge::should_scavenge(*p)) {
42 // We never card mark roots, maybe call a func without test?
43 PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p);
44 }
45 }
46 }; 48 };
47 49
48 void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) { 50 void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
49 assert(Universe::heap()->is_gc_active(), "called outside gc"); 51 assert(Universe::heap()->is_gc_active(), "called outside gc");
50 52
133 "stacks should be empty at this point"); 135 "stacks should be empty at this point");
134 136
135 int random_seed = 17; 137 int random_seed = 17;
136 if (pm->depth_first()) { 138 if (pm->depth_first()) {
137 while(true) { 139 while(true) {
138 oop* p; 140 StarTask p;
139 if (PSPromotionManager::steal_depth(which, &random_seed, p)) { 141 if (PSPromotionManager::steal_depth(which, &random_seed, p)) {
140 #if PS_PM_STATS 142 #if PS_PM_STATS
141 pm->increment_steals(p); 143 pm->increment_steals(p);
142 #endif // PS_PM_STATS 144 #endif // PS_PM_STATS
143 pm->process_popped_location_depth(p); 145 pm->process_popped_location_depth(p);
162 break; 164 break;
163 } 165 }
164 } 166 }
165 } 167 }
166 } 168 }
167 guarantee(pm->stacks_empty(), 169 guarantee(pm->stacks_empty(), "stacks should be empty at this point");
168 "stacks should be empty at this point");
169 } 170 }
170 171
171 // 172 //
172 // SerialOldToYoungRootsTask 173 // SerialOldToYoungRootsTask
173 // 174 //