< prev index next >

src/share/vm/oops/instanceMirrorKlass.cpp

Print this page
rev 11484 : [mq]: webrev.02

@@ -48,16 +48,17 @@
 
 instanceOop InstanceMirrorKlass::allocate_instance(KlassHandle k, TRAPS) {
   // Query before forming handle.
   int size = instance_size(k);
   KlassHandle h_k(THREAD, this);
-  instanceOop i = (instanceOop)CollectedHeap::obj_allocate(h_k, size, CHECK_NULL);
+  int field_offset = java_lang_Class::oop_size_offset();
 
-  // Since mirrors can be variable sized because of the static fields, store
-  // the size in the mirror itself.
-  java_lang_Class::set_oop_size(i, size);
+  assert(field_offset != 0, "must be set");
+  assert(size > 0, "total object size must be positive: %d", size);
 
+  instanceOop i = (instanceOop)CollectedHeap::class_allocate(h_k, size, field_offset, CHECK_NULL);
+  // oop_size is set by class_allocate() before the header is set.
   return i;
 }
 
 int InstanceMirrorKlass::oop_size(oop obj) const {
   return java_lang_Class::oop_size(obj);
< prev index next >