能否重新创建JVM?

3

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

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

它可以正常工作,JVM可用,状态成功。

但当我再次尝试执行它时,它会因为一个奇怪的错误“没有这样的文件或目录”而失败。同样适用于不同版本的oracle和open jdk。有人能解释一下吗?

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


它没有告诉你是哪个目录或文件丢失了吗? - Thomas
不是的。这是perror函数的结果。 - crackcraft
1个回答

3

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

此外,OpenJDK的错误报告JDK-4712793“JNI:在调用DestroyJavaVM()后在JNI_CreateJavaVM()中失败”指出:
“...自JDK/JRE 1.2以来,在单个进程中创建多个VM不受支持。”最后一行意味着一旦创建和销毁了一个VM,就不能启动另一个VM。使用伪代码指定了一个简单的测试用例来重现问题,并且JNI_CreateJavaVM正确地返回!JNI_OK。但是,JDK/JRE仍然不支持VM卸载。

此外,你还可以使用JNI_GetCreatedJavaVMs来检查是否已存在Java虚拟机,并重复使用已找到的虚拟机。 - user2543253
JNI是胡扯。那么Java如何提议添加新选项呢?Java如何保证JVM的两个用户在尝试做不同事情时不会添加冲突的选项呢? - user13947194

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