您可以在一个进程中在JNI中创建多个JVM吗?

时间:2018-05-31 17:49:56

标签: java c++ java-native-interface

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

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

1 个答案:

答案 0 :(得分:2)

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

请参阅Oracle Java 7 JNI documentation中的 JNI_CreateJavaVM

  

从JDK / JRE 1.2开始,不支持在单个进程中创建多个VM。

IBM's JDK 7 JNI documentation

  

IBM i上的Java支持在单个作业或进程中仅创建一个Java虚拟机(JVM)。

(可能,同样的限制适用于IBM AIX JVM)

更详细here

  

您无法在作业中多次成功调用JNI_CreateJavaVM(),并且JNI_GetCreatedJavaVMs()无法在结果列表中返回多个JVM。

     

支持在单个作业或进程中仅创建单个JVM遵循Oracle America,Inc。Java参考实现的标准。