在一个进程中,你能否在JNI中创建多个JVM?

3
我有一个运行在单个进程中的C++框架,可以添加模块,我想加入一种加载JAR并调用其中特定预定义函数的模块。用户可以同时运行很多模块,这就引发了以下问题:
每个模块能否通过 JNI_CreateJavaVM() 创建独立的JVM,使它们彼此完全独立(但在同一个进程中)?还是Java内部依赖全局变量等会导致它们相互干扰?
1个回答

2
您只能在每个进程中创建一个虚拟机,并获得一个JNIEnv。在一些非常古老的JVM实现中曾经支持创建多个VM,但现在不再支持。
请参见Oracle的Java 7 JNI文档中的JNI_CreateJavaVM

自JDK/JRE 1.2以来,在单个进程中创建多个VM不再受支持。

还有IBM的JDK 7 JNI文档

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

(假定IBM AIX JVM也适用同样的限制)

更详细的信息请参见此处
您不能在一个任务中成功地调用JNI_CreateJavaVM()超过一次,并且JNI_GetCreatedJavaVMs()在结果列表中不能返回多个JVM。
仅在单个作业或进程中创建单个JVM的支持遵循Java的Oracle America,Inc.参考实现的标准。

太棒了,谢谢你提供的信息。这让我避免了走弯路。 - Doktor Schrott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接