Mercurial > hg > graal-compiler
comparison src/share/vm/memory/compactingPermGenGen.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 | 2c106685d6d0 |
children | d1605aabd0a1 |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
47 // An OopClosure helper: Recursively adjust all pointers in an object | 47 // An OopClosure helper: Recursively adjust all pointers in an object |
48 // and all objects by referenced it. Clear marks on objects in order | 48 // and all objects by referenced it. Clear marks on objects in order |
49 // to prevent visiting any object twice. | 49 // to prevent visiting any object twice. |
50 | 50 |
51 class RecursiveAdjustSharedObjectClosure : public OopClosure { | 51 class RecursiveAdjustSharedObjectClosure : public OopClosure { |
52 public: | 52 protected: |
53 void do_oop(oop* o) { | 53 template <class T> inline void do_oop_work(T* p) { |
54 oop obj = *o; | 54 oop obj = oopDesc::load_decode_heap_oop_not_null(p); |
55 if (obj->is_shared_readwrite()) { | 55 if (obj->is_shared_readwrite()) { |
56 if (obj->mark()->is_marked()) { | 56 if (obj->mark()->is_marked()) { |
57 obj->init_mark(); // Don't revisit this object. | 57 obj->init_mark(); // Don't revisit this object. |
58 obj->oop_iterate(this); // Recurse - adjust objects referenced. | 58 obj->oop_iterate(this); // Recurse - adjust objects referenced. |
59 obj->adjust_pointers(); // Adjust this object's references. | 59 obj->adjust_pointers(); // Adjust this object's references. |
69 cp->oop_iterate(this); | 69 cp->oop_iterate(this); |
70 } | 70 } |
71 } | 71 } |
72 } | 72 } |
73 } | 73 } |
74 }; | 74 } |
75 public: | |
76 virtual void do_oop(oop* p) { RecursiveAdjustSharedObjectClosure::do_oop_work(p); } | |
77 virtual void do_oop(narrowOop* p) { RecursiveAdjustSharedObjectClosure::do_oop_work(p); } | |
75 }; | 78 }; |
76 | 79 |
77 | 80 |
78 // We need to go through all placeholders in the system dictionary and | 81 // We need to go through all placeholders in the system dictionary and |
79 // try to resolve them into shared classes. Other threads might be in | 82 // try to resolve them into shared classes. Other threads might be in |
84 // RecursiveAdjustSharedObjectClosure to the SystemDictionary. Note | 87 // RecursiveAdjustSharedObjectClosure to the SystemDictionary. Note |
85 // that we must not call find_shared_class with non-read-only symbols | 88 // that we must not call find_shared_class with non-read-only symbols |
86 // as doing so can cause hash codes to be computed, destroying | 89 // as doing so can cause hash codes to be computed, destroying |
87 // forwarding pointers. | 90 // forwarding pointers. |
88 class TraversePlaceholdersClosure : public OopClosure { | 91 class TraversePlaceholdersClosure : public OopClosure { |
89 public: | 92 protected: |
90 void do_oop(oop* o) { | 93 template <class T> inline void do_oop_work(T* p) { |
91 oop obj = *o; | 94 oop obj = oopDesc::load_decode_heap_oop_not_null(p); |
92 if (obj->klass() == Universe::symbolKlassObj() && | 95 if (obj->klass() == Universe::symbolKlassObj() && |
93 obj->is_shared_readonly()) { | 96 obj->is_shared_readonly()) { |
94 symbolHandle sym((symbolOop) obj); | 97 symbolHandle sym((symbolOop) obj); |
95 oop k = SystemDictionary::find_shared_class(sym); | 98 oop k = SystemDictionary::find_shared_class(sym); |
96 if (k != NULL) { | 99 if (k != NULL) { |
97 RecursiveAdjustSharedObjectClosure clo; | 100 RecursiveAdjustSharedObjectClosure clo; |
98 clo.do_oop(&k); | 101 clo.do_oop(&k); |
99 } | 102 } |
100 } | 103 } |
101 } | 104 } |
105 public: | |
106 virtual void do_oop(oop* p) { TraversePlaceholdersClosure::do_oop_work(p); } | |
107 virtual void do_oop(narrowOop* p) { TraversePlaceholdersClosure::do_oop_work(p); } | |
108 | |
102 }; | 109 }; |
103 | 110 |
104 | 111 |
105 void CompactingPermGenGen::initialize_performance_counters() { | 112 void CompactingPermGenGen::initialize_performance_counters() { |
106 | 113 |