【问题标题】:Proper shutdown of JVM when launching from C++从 C++ 启动时正确关闭 JVM
【发布时间】:2015-03-25 00:35:30
【问题描述】:

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    其次,System.exit会导致整个进程被关闭。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-08-13
        • 2016-08-28
        • 1970-01-01
        • 2017-02-04
        • 1970-01-01
        • 1970-01-01
        • 2015-03-18
        相关资源
        最近更新 更多