22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "classfile/javaClasses.hpp" 27 #include "classfile/systemDictionary.hpp" 28 #include "gc/shared/collectedHeap.inline.hpp" 29 #include "gc/shared/specialized_oop_closures.hpp" 30 #include "memory/iterator.inline.hpp" 31 #include "memory/oopFactory.hpp" 32 #include "oops/instanceKlass.hpp" 33 #include "oops/instanceMirrorKlass.hpp" 34 #include "oops/instanceOop.hpp" 35 #include "oops/oop.inline.hpp" 36 #include "oops/symbol.hpp" 37 #include "runtime/handles.inline.hpp" 38 #include "utilities/macros.hpp" 39 40 int InstanceMirrorKlass::_offset_of_static_fields = 0; 41 42 int InstanceMirrorKlass::instance_size(KlassHandle k) { 43 if (k() != NULL && k->is_instance_klass()) { 44 return align_object_size(size_helper() + InstanceKlass::cast(k())->static_field_size()); 45 } 46 return size_helper(); 47 } 48 49 instanceOop InstanceMirrorKlass::allocate_instance(KlassHandle k, TRAPS) { 50 // Query before forming handle. 51 int size = instance_size(k); 52 KlassHandle h_k(THREAD, this); 53 54 assert(size > 0, "total object size must be positive: %d", size); 55 56 // Since mirrors can be variable sized because of the static fields, store 57 // the size in the mirror itself. 58 return (instanceOop)CollectedHeap::class_allocate(h_k, size, CHECK_NULL); 59 } 60 61 int InstanceMirrorKlass::oop_size(oop obj) const { 62 return java_lang_Class::oop_size(obj); 63 } 64 65 int InstanceMirrorKlass::compute_static_oop_field_count(oop obj) { 66 Klass* k = java_lang_Class::as_Klass(obj); 67 if (k != NULL && k->is_instance_klass()) { 68 return InstanceKlass::cast(k)->static_oop_field_count(); 69 } 70 return 0; 71 } | 22 * 23 */ 24 25 #include "precompiled.hpp" 26 #include "classfile/javaClasses.hpp" 27 #include "classfile/systemDictionary.hpp" 28 #include "gc/shared/collectedHeap.inline.hpp" 29 #include "gc/shared/specialized_oop_closures.hpp" 30 #include "memory/iterator.inline.hpp" 31 #include "memory/oopFactory.hpp" 32 #include "oops/instanceKlass.hpp" 33 #include "oops/instanceMirrorKlass.hpp" 34 #include "oops/instanceOop.hpp" 35 #include "oops/oop.inline.hpp" 36 #include "oops/symbol.hpp" 37 #include "runtime/handles.inline.hpp" 38 #include "utilities/macros.hpp" 39 40 int InstanceMirrorKlass::_offset_of_static_fields = 0; 41 42 int InstanceMirrorKlass::instance_size(Klass* k) { 43 if (k != NULL && k->is_instance_klass()) { 44 return align_object_size(size_helper() + InstanceKlass::cast(k)->static_field_size()); 45 } 46 return size_helper(); 47 } 48 49 instanceOop InstanceMirrorKlass::allocate_instance(Klass* k, TRAPS) { 50 // Query before forming handle. 51 int size = instance_size(k); 52 assert(size > 0, "total object size must be positive: %d", size); 53 54 // Since mirrors can be variable sized because of the static fields, store 55 // the size in the mirror itself. 56 return (instanceOop)CollectedHeap::class_allocate(this, size, CHECK_NULL); 57 } 58 59 int InstanceMirrorKlass::oop_size(oop obj) const { 60 return java_lang_Class::oop_size(obj); 61 } 62 63 int InstanceMirrorKlass::compute_static_oop_field_count(oop obj) { 64 Klass* k = java_lang_Class::as_Klass(obj); 65 if (k != NULL && k->is_instance_klass()) { 66 return InstanceKlass::cast(k)->static_oop_field_count(); 67 } 68 return 0; 69 } |