我有非常简单的代码,可以创建一个JVM实例并销毁它。
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
...
status = (*jvm)->DestroyJavaVM(jvm);
...
一切正常,JVM正常运行,状态成功。
但是当我再次尝试执行它时,它失败并出现一个奇怪的错误"没有这样的文件或目录"。以同样的方式为oracle和不同版本的open jdk。有人可以解释一下吗?
答案 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。