< prev index next >

src/hotspot/share/memory/oopFactory.cpp

Print this page
@@ -27,13 +27,17 @@
  #include "classfile/vmSymbols.hpp"
  #include "gc/shared/collectedHeap.inline.hpp"
  #include "memory/oopFactory.hpp"
  #include "memory/resourceArea.hpp"
  #include "memory/universe.hpp"
+ #include "oops/flatArrayKlass.hpp"
+ #include "oops/flatArrayOop.inline.hpp"
+ #include "oops/flatArrayOop.hpp"
  #include "oops/instanceKlass.hpp"
  #include "oops/instanceOop.hpp"
  #include "oops/objArrayKlass.hpp"
+ #include "oops/objArrayOop.inline.hpp"
  #include "oops/objArrayOop.hpp"
  #include "oops/oop.inline.hpp"
  #include "oops/typeArrayKlass.hpp"
  #include "oops/typeArrayOop.inline.hpp"
  #include "runtime/handles.inline.hpp"

@@ -113,9 +117,37 @@
    } else {
      return InstanceKlass::cast(klass)->allocate_objArray(1, length, THREAD);
    }
  }
  
+ objArrayOop oopFactory::new_null_free_objArray(Klass* k, int length, TRAPS) {
+   InlineKlass* klass = InlineKlass::cast(k);
+   ObjArrayKlass* array_klass = klass->null_free_reference_array(CHECK_NULL);
+ 
+   assert(array_klass->is_objArray_klass(), "Must be");
+   assert(array_klass->is_null_free_array_klass(), "Must be");
+ 
+   objArrayOop oop = array_klass->allocate(length, CHECK_NULL);
+ 
+   assert(oop == nullptr || oop->is_objArray(), "Sanity");
+   assert(oop == nullptr || oop->klass()->is_null_free_array_klass(), "Sanity");
+ 
+   return oop;
+ }
+ 
+ flatArrayOop oopFactory::new_flatArray(Klass* k, int length, LayoutKind lk, TRAPS) {
+   InlineKlass* klass = InlineKlass::cast(k);
+   Klass* array_klass = klass->flat_array_klass(lk, CHECK_NULL);
+ 
+   assert(array_klass->is_flatArray_klass(), "Must be");
+ 
+   flatArrayOop oop = FlatArrayKlass::cast(array_klass)->allocate(length, lk, CHECK_NULL);
+   assert(oop == nullptr || oop->is_flatArray(), "sanity");
+   assert(oop == nullptr || oop->klass()->is_flatArray_klass(), "sanity");
+ 
+   return oop;
+ }
+ 
  objArrayHandle oopFactory::new_objArray_handle(Klass* klass, int length, TRAPS) {
    objArrayOop obj = new_objArray(klass, length, CHECK_(objArrayHandle()));
    return objArrayHandle(THREAD, obj);
  }
< prev index next >