java - 你能在一个进程中在 JNI 中创建多个 JVM 吗?

标签 java c++ java-native-interface

<分区>

我有一个在单个进程中运行并允许模块的 C++ 框架,我想添加的一种模块是加载 JAR 然后调用其中的特定预定义函数的模块。用户可以同时运行任意多个模块,这就提出了一个问题:

每个模块是否可以使用 JNI_CreateJavaVM() 创建一个单独的 JVM,并且这些 JVM 将完全相互独立(但是在同一进程中)?或者 Java 是否在内部依赖全局变量等,这会使它们相互干扰?

最佳答案

您只能在每个进程中创建一个 VM,并获得一个 JNIEnv。一些非常古老的 JVM 实现曾经支持创建多个 VM,但现在不再支持了。

参见 Oracle 的 Java 7 JNI documentation 中的 JNI_CreateJavaVM :

As of JDK/JRE 1.2 , creation of multiple VMs in a single process is not supported.

IBM's JDK 7 JNI documentation :

Java on IBM i supports creating only one Java virtual machine (JVM) within a single job or process.

(大概,同样的限制适用于 IBM AIX JVM)

更详细here :

You cannot successfully call JNI_CreateJavaVM() more than once in a job, and JNI_GetCreatedJavaVMs() cannot return more than one JVM in a list of results.

Support for creating only a single JVM within a single job or process follows the standards of the Oracle America, Inc. reference implementation of Java.

关于java - 你能在一个进程中在 JNI 中创建多个 JVM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50630057/

相关文章:

c++ - 如何检查一个值是否包含在 vector 中? C++

c++ - 从 QMap 中调用成员函数

android - 我们可以访问我的安卓手机的麦克风驱动程序吗

java - 如何在 hadoop 源代码中调试 native 函数?

java - getDeclaredMethods/getDeclaredFields/getConstructors 的替代方法

java - 来自java的Linux Shell命令

java - 将图像上传到 Firebase 存储后,无法将图像 url 放入 Firestore 数据库

java - 了解饥饿自由和无等待方法

java - Crypt 使用 RESTEasy 通过注释解密 java 对象 ID

c++ - std::hash::operator() - 异常保证在哪里?