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
相关推荐
平凡但不平庸的码农1 分钟前
Go 语言:值传递 vs 指针传递
开发语言·后端·golang
神仙别闹4 分钟前
基于Python实现一个C语言的编译器
java·c语言·python
Allen_LVyingbo6 分钟前
面向医疗群体智能的协同诊疗与群体决策支持系统(下)
开发语言·数据结构·windows·python·动态规划
读书札记20227 分钟前
Qt Creator 调试报错:Unable to create a debugging engine.
开发语言·qt
透明的玻璃杯7 分钟前
Qt Creator + Windows + Protobuf 最优方案(Mqqt通讯采用的方式)
开发语言·windows·qt
冷小鱼8 分钟前
JVM 深度调优实战:从 JDK 8 到 JDK 21 的演进与中间件落地
java·jvm·中间件
玛卡巴卡ldf11 分钟前
【LeetCode 手撕算法】(回溯)全排列DFS、子集、电话号码字母组合 九键、组合总和、括号生成、单词搜索、分割回文数
java·算法·leetcode·力扣
小书房12 分钟前
Kotlin协程的运行原理
android·开发语言·kotlin·协程
极客先躯12 分钟前
高级java每日一道面试题-2025年12月06日-实战篇[Dockerj]-如何配置 Docker 的镜像加速器?国内有哪些常用加速源?
java·docker·配置docker的镜像加速器·国内有哪些常用加速源·镜像加速器的本质与配置原理·镜像拉取流程对比·加速前后架构差异
隐退山林13 分钟前
JavaEE进阶:SpringIoC&DI
java·开发语言·java-ee