<分区>
我有一个在单个进程中运行并允许模块的 C++ 框架,我想添加的一种模块是加载 JAR 然后调用其中的特定预定义函数的模块。用户可以同时运行任意多个模块,这就提出了一个问题:
每个模块是否可以使用 JNI_CreateJavaVM() 创建一个单独的 JVM,并且这些 JVM 将完全相互独立(但是在同一进程中)?或者 Java 是否在内部依赖全局变量等,这会使它们相互干扰?
<分区>
我有一个在单个进程中运行并允许模块的 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/