35 constantPoolCacheOop constantPoolCacheKlass::allocate(int length, TRAPS) { |
35 constantPoolCacheOop constantPoolCacheKlass::allocate(int length, TRAPS) { |
36 // allocate memory |
36 // allocate memory |
37 int size = constantPoolCacheOopDesc::object_size(length); |
37 int size = constantPoolCacheOopDesc::object_size(length); |
38 KlassHandle klass (THREAD, as_klassOop()); |
38 KlassHandle klass (THREAD, as_klassOop()); |
39 constantPoolCacheOop cache = (constantPoolCacheOop) |
39 constantPoolCacheOop cache = (constantPoolCacheOop) |
40 CollectedHeap::permanent_array_allocate(klass, size, length, CHECK_NULL); |
40 CollectedHeap::permanent_obj_allocate(klass, size, CHECK_NULL); |
|
41 cache->set_length(length); |
41 cache->set_constant_pool(NULL); |
42 cache->set_constant_pool(NULL); |
42 return cache; |
43 return cache; |
43 } |
44 } |
44 |
45 |
45 |
|
46 klassOop constantPoolCacheKlass::create_klass(TRAPS) { |
46 klassOop constantPoolCacheKlass::create_klass(TRAPS) { |
47 constantPoolCacheKlass o; |
47 constantPoolCacheKlass o; |
48 KlassHandle klassklass(THREAD, Universe::arrayKlassKlassObj()); |
48 KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); |
49 arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL); |
49 KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); |
50 KlassHandle super (THREAD, k->super()); |
50 // Make sure size calculation is right |
51 complete_create_array_klass(k, super, CHECK_NULL); |
51 assert(k()->size() == align_object_size(header_size()), "wrong size for object"); |
|
52 java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror |
52 return k(); |
53 return k(); |
53 } |
54 } |
54 |
55 |
55 |
56 |
56 void constantPoolCacheKlass::oop_follow_contents(oop obj) { |
57 void constantPoolCacheKlass::oop_follow_contents(oop obj) { |
181 |
182 |
182 void constantPoolCacheKlass::oop_print_on(oop obj, outputStream* st) { |
183 void constantPoolCacheKlass::oop_print_on(oop obj, outputStream* st) { |
183 assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); |
184 assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); |
184 constantPoolCacheOop cache = (constantPoolCacheOop)obj; |
185 constantPoolCacheOop cache = (constantPoolCacheOop)obj; |
185 // super print |
186 // super print |
186 arrayKlass::oop_print_on(obj, st); |
187 Klass::oop_print_on(obj, st); |
187 // print constant pool cache entries |
188 // print constant pool cache entries |
188 for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->print(st, i); |
189 for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->print(st, i); |
189 } |
190 } |
190 |
191 |
191 #endif |
192 #endif |
192 |
193 |
193 void constantPoolCacheKlass::oop_verify_on(oop obj, outputStream* st) { |
194 void constantPoolCacheKlass::oop_verify_on(oop obj, outputStream* st) { |
194 guarantee(obj->is_constantPoolCache(), "obj must be constant pool cache"); |
195 guarantee(obj->is_constantPoolCache(), "obj must be constant pool cache"); |
195 constantPoolCacheOop cache = (constantPoolCacheOop)obj; |
196 constantPoolCacheOop cache = (constantPoolCacheOop)obj; |
196 // super verify |
197 // super verify |
197 arrayKlass::oop_verify_on(obj, st); |
198 Klass::oop_verify_on(obj, st); |
198 // print constant pool cache entries |
199 // print constant pool cache entries |
199 for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->verify(st); |
200 for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->verify(st); |
200 } |
201 } |
201 |
202 |
202 |
203 |