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