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
相关推荐
liangbm31 分钟前
MATLAB系列05:自定义函数
开发语言·笔记·matlab·教程·函数·自定义函数·按值传递
计算机学姐1 分钟前
基于PHP的电脑线上销售系统
开发语言·vscode·后端·mysql·编辑器·php·phpstorm
三玖诶11 分钟前
如何在 Qt 的 QListWidget 中为某一行添加点击事件
开发语言·qt
InJre17 分钟前
QT widgets 窗口缩放,自适应窗口大小进行布局
开发语言·qt·ui
阿乾之铭19 分钟前
spring MVC 拦截器
java·spring·mvc
可愛小吉20 分钟前
Python 课程10-单元测试
开发语言·python·单元测试·tdd·unittest
码爸22 分钟前
flink 批量写clickhouse
java·clickhouse·flink
djgxfc24 分钟前
简单了解Maven与安装
java·maven
中文很快乐27 分钟前
springboot结合p6spy进行SQL监控
java·数据库·sql
丶白泽28 分钟前
重修设计模式-概览
java·设计模式