< prev index next >

src/hotspot/share/prims/unsafe.cpp

Print this page
@@ -777,10 +777,16 @@
    // but requires it to be linear in byte offset.
    return field_offset_from_byte_offset(scale) - field_offset_from_byte_offset(0);
  } UNSAFE_END
  
  
+ UNSAFE_ENTRY(jlong, Unsafe_GetObjectSize0(JNIEnv* env, jobject o, jobject obj))
+   oop p = JNIHandles::resolve(obj);
+   return Universe::heap()->obj_size(p) * HeapWordSize;
+ UNSAFE_END
+ 
+ 
  static inline void throw_new(JNIEnv *env, const char *ename) {
    jclass cls = env->FindClass(ename);
    if (env->ExceptionCheck()) {
      env->ExceptionClear();
      tty->print_cr("Unsafe: cannot throw %s because FindClass has failed", ename);

@@ -1238,10 +1244,11 @@
      {CC "staticFieldOffset0", CC "(" FLD ")J",           FN_PTR(Unsafe_StaticFieldOffset0)},
      {CC "staticFieldBase0",   CC "(" FLD ")" OBJ,        FN_PTR(Unsafe_StaticFieldBase0)},
      {CC "ensureClassInitialized0", CC "(" CLS ")V",      FN_PTR(Unsafe_EnsureClassInitialized0)},
      {CC "arrayBaseOffset0",   CC "(" CLS ")I",           FN_PTR(Unsafe_ArrayBaseOffset0)},
      {CC "arrayIndexScale0",   CC "(" CLS ")I",           FN_PTR(Unsafe_ArrayIndexScale0)},
+     {CC "getObjectSize0",     CC "(Ljava/lang/Object;)J", FN_PTR(Unsafe_GetObjectSize0)},
  
      {CC "defineClass0",       CC "(" DC_Args ")" CLS,    FN_PTR(Unsafe_DefineClass0)},
      {CC "allocateInstance",   CC "(" CLS ")" OBJ,        FN_PTR(Unsafe_AllocateInstance)},
      {CC "throwException",     CC "(" THR ")V",           FN_PTR(Unsafe_ThrowException)},
      {CC "compareAndSetReference",CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSetReference)},
< prev index next >