如果线程使用
设置关闭挂钩Runtime.getRuntime().addShutdownHook();
通过jna调用方法:
kernel32.CreateToolhelp32Snapshot (0x00000002, 0)
它崩溃了VM。 如果我在
中调用相同的方法WindowListener.windowClosing()
挂钩,调用不会崩溃虚拟机。
知道为什么吗?
如果可能有任何用途,我可以发布部分VM崩溃错误报告。
答案 0 :(得分:0)
发布VM崩溃报告应该有所帮助。
答案 1 :(得分:0)
发布关于pastebin等的崩溃报告的部分内容,也许有些人可以从中获得一些信息。
嗯,我不确定,但如果您阅读了addShutdownHook()
关机挂钩在微妙的时间运行 在虚拟机的生命周期中 因此应该防御性地编码。 他们应该在 特别是,写得很好 线程安全并避免死锁 尽可能的。他们也应该 不要盲目依赖服务那 可能已经注册了自己的关机 钩子,因此可能自己 关闭的过程。 .... 关闭挂钩也应该完成 他们的工作很快。 ...
这些让我得出的结论是,调用这样的方法可能需要来自JVM的服务,这些服务不再可用,或者这个调用需要的时间太长。