是否可以重新创建JVM?

时间:2015-11-11 13:57:04

标签: java java-native-interface

我有非常简单的代码,可以创建一个JVM实例并销毁它。

status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
...
status = (*jvm)->DestroyJavaVM(jvm);
...

一切正常,JVM正常运行,状态成功。

但是当我再次尝试执行它时,它失败并出现一个奇怪的错误"没有这样的文件或目录"。以同样的方式为oracle和不同版本的open jdk。有人可以解释一下吗?

完整的示例代码: https://github.com/crackcraft/create_destoy_jvm

1 个答案:

答案 0 :(得分:1)

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#destroy_java_vm

  

...然而,JDK / JRE仍然不支持VM卸载。

此外,Bug数据库:JDK-4712793:JNI:调用DestroyJavaVM()后JNI_CreateJavaVM()失败 规定:

  

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

     

最后一行暗示一旦VM被创建和销毁,就会产生一个   无法启动另一个VM。一个简单的测试用例用于重现伪代码中指定的问题,JNI_CreateJavaVM正确返回!JNI_OK。