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
相关推荐
程序员清风12 分钟前
跳表的原理和时间复杂度,为什么还需要字典结构配合?
java·后端·面试
渣哥25 分钟前
Kafka消息丢失的3种场景,生产环境千万要注意
java
渣哥26 分钟前
ElasticSearch深度分页的致命缺陷,千万数据查询秒变蜗牛
java
Olrookie26 分钟前
XXL-JOB GLUE模式动态数据源实践:Spring AOP + MyBatis 解耦多库查询
java·数据库·spring boot
长臂人猿28 分钟前
JVM常用工具:jstat、jmap、jstack
linux·运维·jvm
柯南二号43 分钟前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
又是努力搬砖的一年1 小时前
SpringBoot中,接口加解密
java·spring boot·后端
:-)1 小时前
idea配置maven国内镜像
java·ide·maven·intellij-idea
柠檬味的薄荷心1 小时前
【C#补全计划】多线程
jvm
我是哈哈hh1 小时前
【Node.js】ECMAScript标准 以及 npm安装
开发语言·前端·javascript·node.js