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;