2015-11-11 150 views
1

我有非常簡單的代碼,創建一個JVM實例並銷燬它。是否有可能重新創建JVM?

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

它工作正常,JVM可操作,狀態是成功的。

但是,當我嘗試再次執行它,它會失敗,並出現奇怪的錯誤「沒有這樣的文件或目錄」。對於oracle和打開不同版本的jdk也是一樣。有人可以解釋嗎?

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

+0

是不是告訴你_which_目錄或文件丟失了? – Thomas

+0

不是的。不是的。這是錯誤的結果 – crackcraft

回答

1

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

...的JDK/JRE仍然不支持虛擬機卸載,但是。

此外,bug數據庫:JDK-4712793:JNI:失敗在JNI_CreateJavaVM()調用DestroyJavaVM() 狀態後:

...至於JDK/JRE 1.2,創造的不支持單個進程中的多個虛擬機「

最後一行意味着一旦虛擬機創建並銷燬,一個 將無法​​啓動另一個虛擬機。使用簡單的測試用例來重現問題,如僞代碼,並且JNI_CreateJavaVM正確返回!JNI_OK。

+0

要補充的是:您可以使用'JNI_GetCreatedJavaVMs'檢查現有的Java VM,並重新使用找到的。 – user2543253

相關問題