Mercurial > hg > graal-compiler
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 // |