java native newInstance0方法在jvm底层实现原理

使用构造器反射对象实例

java 复制代码
private static native Object newInstance0(Constructor<?> c, Object[] args)
        throws InstantiationException,
               IllegalArgumentException,
               InvocationTargetException;

newInstance0底层实现逻辑

jvm源码

java 复制代码
JNIEXPORT jobject JNICALL Java_jdk_internal_reflect_NativeConstructorAccessorImpl_newInstance0
(JNIEnv *env, jclass unused, jobject c, jobjectArray args)
{
    return JVM_NewInstanceFromConstructor(env, c, args);
}

jvm.cpp实现这个方法JVM_NewInstanceFromConstructor

java 复制代码
JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0))
  JVMWrapper("JVM_NewInstanceFromConstructor");
  oop constructor_mirror = JNIHandles::resolve(c);
  objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));
  oop result = Reflection::invoke_constructor(constructor_mirror, args, CHECK_NULL);
  jobject res = JNIHandles::make_local(env, result);
  if (JvmtiExport::should_post_vm_object_alloc()) {
    JvmtiExport::post_vm_object_alloc(JavaThread::current(), result);
  }
  return res;
JVM_END
相关推荐
x70x8018 小时前
C++中auto的使用
开发语言·数据结构·c++·算法·深度优先
Han.miracle18 小时前
数据结构与算法-012
java·开发语言
计算机毕设指导618 小时前
基于微信小程序+django连锁火锅智慧餐饮管理系统【源码文末联系】
java·后端·python·mysql·微信小程序·小程序·django
智航GIS18 小时前
2.1 变量与数据类型
开发语言·python
拼好饭和她皆失18 小时前
c++---快速记忆stl容器
开发语言·c++
黎雁·泠崖18 小时前
C 语言字符串高阶:strstr/strtok/strerror 精讲(含 strstr 模拟实现)
c语言·开发语言
PeaceKeeper718 小时前
Objective-c的内存管理以及Block
开发语言·macos·objective-c
2501_9369603618 小时前
c语言期末速成8——文件
c语言·开发语言
小鸡脚来咯18 小时前
RabbitMQ详解(从入门到实战)
开发语言·后端·ruby