从C ++启动时正确关闭JVM

时间:2015-03-25 00:35:31

标签: java c++ jvm java-native-interface shutdown-hook

我通过JNI从C ++代码启动JVM。我有一个问题,当刚刚退出我的C ++进程时,似乎没有运行来自JVM的一些关闭挂钩,因此一些临时资源仍然存在,在我的特定情况下,在我下次打开C ++进程时会阻止启动JVM。 我尝试了jvm-> DestroyJavaVM(),但是在我的所有进程窗口关闭之后,我仍然可以看到进程正在运行。当通过JNI启动时,确保JVM正常关闭的最佳等待是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,jvm->DestroyJavaVM()不会返回,直到所有非守护进程的jvm线程都停止,它只会等待它们停止,所以你应该在java中停止它们。

其次,System.exit将导致整个过程被关闭。

所以你真正需要的是检查你的java代码还没有停止哪个线程,例如ui框架的后台消息循环线程,例如gwtswing

答案 1 :(得分:0)

最简单的方法是通过JNI调用System.exit