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
相关推荐
贾斯汀玛尔斯几秒前
每天学一个算法--Aho–Corasick 自动机
java·linux·算法
码农的神经元1 分钟前
配电网智能决策平台:从风险感知到自愈控制的 Python 实现
开发语言·python
xlq223228 分钟前
46.线程池
linux·开发语言
LF男男10 分钟前
Action- C# 内置的委托类型
java·开发语言·c#
记录无知岁月11 分钟前
【C/C++】头文件包含问题分析
c语言·开发语言·c++
神仙别闹20 分钟前
基于Python实现(控制台)个人信息系统
开发语言·python
练习时长一年20 分钟前
@NotEmpty注解引发的报错
java·服务器·前端
a95114164223 分钟前
c++如何解析二进制协议中的可选字段读取逻辑及其反序列化【详解】
jvm·数据库·python
HoneyMoose26 分钟前
Discourse 更加依赖 tag 的扁平化管理
开发语言
Hello eveybody31 分钟前
介绍最大公因数和最小公约数(Python)
开发语言·python