Mercurial > hg > graal-compiler
comparison src/share/vm/memory/dump.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 |
---|---|
58 StringHashCodeClosure(Thread* t) { | 58 StringHashCodeClosure(Thread* t) { |
59 THREAD = t; | 59 THREAD = t; |
60 hash_offset = java_lang_String::hash_offset_in_bytes(); | 60 hash_offset = java_lang_String::hash_offset_in_bytes(); |
61 } | 61 } |
62 | 62 |
63 void do_oop(oop* pobj) { | 63 void do_oop(oop* p) { |
64 if (pobj != NULL) { | 64 if (p != NULL) { |
65 oop obj = *pobj; | 65 oop obj = *p; |
66 if (obj->klass() == SystemDictionary::string_klass()) { | 66 if (obj->klass() == SystemDictionary::string_klass()) { |
67 | 67 |
68 int hash; | 68 int hash; |
69 typeArrayOop value = java_lang_String::value(obj); | 69 typeArrayOop value = java_lang_String::value(obj); |
70 int length = java_lang_String::length(obj); | 70 int length = java_lang_String::length(obj); |
77 } | 77 } |
78 obj->int_field_put(hash_offset, hash); | 78 obj->int_field_put(hash_offset, hash); |
79 } | 79 } |
80 } | 80 } |
81 } | 81 } |
82 void do_oop(narrowOop* p) { ShouldNotReachHere(); } | |
82 }; | 83 }; |
83 | 84 |
84 | 85 |
85 // Remove data from objects which should not appear in the shared file | 86 // Remove data from objects which should not appear in the shared file |
86 // (as it pertains only to the current JVM). | 87 // (as it pertains only to the current JVM). |
119 | 120 |
120 // Closure: mark objects closure. | 121 // Closure: mark objects closure. |
121 | 122 |
122 class MarkObjectsOopClosure : public OopClosure { | 123 class MarkObjectsOopClosure : public OopClosure { |
123 public: | 124 public: |
124 void do_oop(oop* pobj) { | 125 void do_oop(oop* p) { mark_object(*p); } |
125 mark_object(*pobj); | 126 void do_oop(narrowOop* p) { ShouldNotReachHere(); } |
126 } | |
127 }; | 127 }; |
128 | 128 |
129 | 129 |
130 class MarkObjectsSkippingKlassesOopClosure : public OopClosure { | 130 class MarkObjectsSkippingKlassesOopClosure : public OopClosure { |
131 public: | 131 public: |
134 if (obj != NULL && | 134 if (obj != NULL && |
135 !obj->is_klass()) { | 135 !obj->is_klass()) { |
136 mark_object(obj); | 136 mark_object(obj); |
137 } | 137 } |
138 } | 138 } |
139 void do_oop(narrowOop* pobj) { ShouldNotReachHere(); } | |
139 }; | 140 }; |
140 | 141 |
141 | 142 |
142 static void mark_object_recursive_skipping_klasses(oop obj) { | 143 static void mark_object_recursive_skipping_klasses(oop obj) { |
143 mark_object(obj); | 144 mark_object(obj); |
552 guarantee(f->is_shared(), "Oop doesn't refer to shared space."); | 553 guarantee(f->is_shared(), "Oop doesn't refer to shared space."); |
553 *p = f; | 554 *p = f; |
554 } | 555 } |
555 } | 556 } |
556 } | 557 } |
558 void do_oop(narrowOop* pobj) { ShouldNotReachHere(); } | |
557 }; | 559 }; |
558 | 560 |
559 | 561 |
560 void sort_methods(instanceKlass* ik, TRAPS) { | 562 void sort_methods(instanceKlass* ik, TRAPS) { |
561 klassOop super = ik->super(); | 563 klassOop super = ik->super(); |
687 assert(obj == NULL || obj->is_shared(), | 689 assert(obj == NULL || obj->is_shared(), |
688 "Oop in shared space not pointing into shared space."); | 690 "Oop in shared space not pointing into shared space."); |
689 *top = obj; | 691 *top = obj; |
690 ++top; | 692 ++top; |
691 } | 693 } |
694 | |
695 void do_oop(narrowOop* pobj) { ShouldNotReachHere(); } | |
692 | 696 |
693 void do_int(int* p) { | 697 void do_int(int* p) { |
694 check_space(); | 698 check_space(); |
695 *top = (oop)(intptr_t)*p; | 699 *top = (oop)(intptr_t)*p; |
696 ++top; | 700 ++top; |