comparison src/share/vm/gc_implementation/parallelScavenge/psScavenge.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 12eea04c8b06
comparison
equal deleted inserted replaced
110:a49a647afe9a 113:ba764ed4b6f2
63 _to_space = heap->young_gen()->to_space(); 63 _to_space = heap->young_gen()->to_space();
64 64
65 assert(_promotion_manager != NULL, "Sanity"); 65 assert(_promotion_manager != NULL, "Sanity");
66 } 66 }
67 67
68 void do_oop(oop* p) { 68 template <class T> void do_oop_work(T* p) {
69 assert (*p != NULL, "expected non-null ref"); 69 assert (!oopDesc::is_null(*p), "expected non-null ref");
70 assert ((*p)->is_oop(), "expected an oop while scanning weak refs"); 70 assert ((oopDesc::load_decode_heap_oop_not_null(p))->is_oop(),
71 71 "expected an oop while scanning weak refs");
72 oop obj = oop(*p); 72
73 // Weak refs may be visited more than once. 73 // Weak refs may be visited more than once.
74 if (PSScavenge::should_scavenge(obj, _to_space)) { 74 if (PSScavenge::should_scavenge(p, _to_space)) {
75 PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p); 75 PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p);
76 } 76 }
77 } 77 }
78 virtual void do_oop(oop* p) { PSKeepAliveClosure::do_oop_work(p); }
79 virtual void do_oop(narrowOop* p) { PSKeepAliveClosure::do_oop_work(p); }
78 }; 80 };
79 81
80 class PSEvacuateFollowersClosure: public VoidClosure { 82 class PSEvacuateFollowersClosure: public VoidClosure {
81 private: 83 private:
82 PSPromotionManager* _promotion_manager; 84 PSPromotionManager* _promotion_manager;
83 public: 85 public:
84 PSEvacuateFollowersClosure(PSPromotionManager* pm) : _promotion_manager(pm) {} 86 PSEvacuateFollowersClosure(PSPromotionManager* pm) : _promotion_manager(pm) {}
85 87
86 void do_void() { 88 virtual void do_void() {
87 assert(_promotion_manager != NULL, "Sanity"); 89 assert(_promotion_manager != NULL, "Sanity");
88 _promotion_manager->drain_stacks(true); 90 _promotion_manager->drain_stacks(true);
89 guarantee(_promotion_manager->stacks_empty(), 91 guarantee(_promotion_manager->stacks_empty(),
90 "stacks should be empty at this point"); 92 "stacks should be empty at this point");
91 } 93 }