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
相关推荐
froginwe112 小时前
Highcharts 测量图:全面解析与优化实践
开发语言
m0_515098422 小时前
如何实现SQL数据分片规则更新_利用触发器同步元数据
jvm·数据库·python
qq_330037992 小时前
uni-app怎么实现App端蓝牙搜索与连接 uni-app低功耗蓝牙开发【代码】
jvm·数据库·python
qq_654366982 小时前
SQL中如何通过JOIN实现级联删除_利用外键约束与JOIN辅助
jvm·数据库·python
三千星2 小时前
Java开发者转型AI工程化Week 2:从核心能力到生产就绪
java·ai编程
2301_764150562 小时前
layui form禁用表单元素 layui如何disable一个输入框
jvm·数据库·python
雪芽蓝域zzs2 小时前
uni-app x 使用 UTS 语言使用 mixins
开发语言·javascript·uni-app
亦暖筑序2 小时前
让 AI 客服真能用的 3 个模块:情绪感知 + 意图识别 + Agent 工具链
java·人工智能·后端
weixin_458580123 小时前
CSS如何为Bootstrap模态框增加进入动画_利用transition实现
jvm·数据库·python
justjinji3 小时前
Go语言如何用Jaeger_Go语言Jaeger链路追踪教程【完整】
jvm·数据库·python