news 2026/4/30 2:05:49

Java虚拟机精讲【2.5】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java虚拟机精讲【2.5】
4.3.4 调用JNI_CreateJavaVM()函数初始化HotSpot

本书 4.3.3 节介绍了结构体 InvocationFunctions 类型中包含的函数指针 CreateJavaVM 类型,那么与 CreateJavaVM 类型对应的目标函数就是 JNI_CreateJavaVM()。

当在 Launcher 中通过 JavaMain()函数调用 InitializeJVM()函数时, InitializeJVM()函数便会通过函数指针 CreateJavaVM 类型指向本地函数 JNI_CreateJavaVM()完成 HotSpot 的初始化。

为了使大家阅读更方便,本书示例了 InitializeJVM()函数的完整代码,如下所示:

代码 4-12 InitializeJVM()函数的完整代码 static jboolean InitializeJVM (JavaVM **pvm, JNIEnv **penv, InvocationFunctions *ifn){ JavaVMInitArgs args; jint r; memset(&args, 0, sizeof(args)); args.version = JNI_VERSION_1_2; args.nOptions = numOptions; args.options = options; args.ignoreUnrecognized = JNI_FALSE; if (_launcher_debug) { int i = 0; printf("JavaVM args:\n "); printf("version 0x%08lx, " printf("ignoreUnrecognized is %s, ", args.ignoreUnrecognized ? "JNI_TRUE" : "JNI_FALSE"); printf("nOptions is %ld\n", (long)args.nOptions); for (i = 0; i < numOptions; i++) printf(" option[%2d] = '%s'\n", i, args.options[i].optionString); } /* 通过函数指针指向本地的 JNI_CreateJavaVM()函数完成 JVM 初始化 */ r = ifn->CreateJavaVM(pvm, (void **)penv, &args); JLI_MemFree(options); return r == JNI_OK; }

在本地函数 JNI_CreateJavaVM()内部,究竟是如何执行 JVM 的初始化呢?大家可以在JNI 接口中找到 HotSpot 的具体初始化细节(请阅读第 5 章)。 简单来说, JNI_CreateJavaVM()函数又调用了包含在/hotspot/src/share/vm/runtim/thread.cpp 中 Threads 模块的 create_vm()函数来最终完成 HotSpot 的初始化。如下所示:

代码 4-13 调用 Threads 模块的 create_vm()函数

/* 初始化 JVM */

result = Threads::create_vm((JavaVMInitArgs*) args, &can_try_again);

4.3.5 调用LoadClass()函数获取Java启动类

当成功对 JVM 执行初始化后, Launcher 就会调用 LoadClass()函数获取 Java 程序的启动类。如下所示:

代码 4-14 获取 Java 启动类

/* 获取 Java 程序的启动类 */

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 2:05:25

超导量子比特贝尔测试中的准备非平稳性漏洞解析

1. 超导量子比特贝尔测试中的准备非平稳性漏洞解析量子计算领域中的贝尔测试是验证量子非局域性的重要工具&#xff0c;其核心原理基于CHSH不等式在经典与量子体系中的不同表现。在理想情况下&#xff0c;量子系统可以违反经典CHSH不等式&#xff08;|S|≤2&#xff09;&#x…

作者头像 李华
网站建设 2026/4/30 2:04:22

香蕉派BPI-R4 WiFi 7模块解析与性能测试

1. 香蕉派BPI-R4-NIC-BE14 WiFi 7模块深度解析作为一款专为香蕉派BPI-R4路由器开发板设计的WiFi 7模块&#xff0c;BPI-R4-NIC-BE14的发布终于补全了这款高性能单板计算机的无线网络能力。去年发布的BPI-R4本身已经具备强大的有线网络接口——双10GbE SFP光纤接口和四个千兆以太…

作者头像 李华
网站建设 2026/4/30 2:02:24

HiSLIP协议:现代测试测量系统的高速仪器控制标准

1. HiSLIP协议概述&#xff1a;下一代仪器控制标准HiSLIP&#xff08;High-Speed LAN Instrument Protocol&#xff09;是IVI基金会制定的基于TCP/IP的仪器控制协议&#xff0c;专为满足现代测试测量系统对高速数据传输和实时控制的需求而设计。作为传统GPIB和VXI-11协议的演进…

作者头像 李华
网站建设 2026/4/30 1:50:28

从零开始:如何用Uncle小说打造你的个人数字图书馆?

从零开始&#xff1a;如何用Uncle小说打造你的个人数字图书馆&#xff1f; 【免费下载链接】uncle-novel &#x1f4d6; Uncle小说&#xff0c;PC版&#xff0c;一个全网小说下载器及阅读器&#xff0c;目录解析与书源结合&#xff0c;支持有声小说与文本小说&#xff0c;可下载…

作者头像 李华