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
相关推荐
吕源林几秒前
HTML图片怎么用UnoCSS对齐_UnoCSS原子化CSS图片对齐实战
jvm·数据库·python
额呃呃1 分钟前
Andriod项目番茄钟
java·开发语言
Via_Neo1 分钟前
不能对方法返回值进行赋值
开发语言·python
m0_743623921 分钟前
Tailwind CSS如何实现鼠标悬停变色_使用hover-bg-blue-500类
jvm·数据库·python
2301_777599372 分钟前
CSS如何实现复杂的边框渐变效果_配合border-image使用
jvm·数据库·python
HHHHH1010HHHHH3 分钟前
SQL高效实现基于JOIN的交叉分析_多表关联实现多维统计
jvm·数据库·python
m0_515098424 分钟前
SSD硬盘对HTML工具速度有影响吗_存储介质与开发效率关系【详解】
jvm·数据库·python
weixin_568996065 分钟前
Bootstrap中.d-none类在不同分辨率下的高级用法
jvm·数据库·python
qq_206901395 分钟前
golang如何调用Twilio语音短信API_golang Twilio语音短信API调用实战
jvm·数据库·python
m0_684501985 分钟前
c++如何将宽字符串wstring输出到UTF-8文件_C++17编码转换【附源码】
jvm·数据库·python