jna调用kernel32.CreateToolhelp32Snapshot在shutdown hook中崩溃VM

时间:2009-11-05 15:52:01

标签: java jna application-shutdown jvm-crash

如果线程使用

设置关闭挂钩
Runtime.getRuntime().addShutdownHook();

通过jna调用方法:

kernel32.CreateToolhelp32Snapshot (0x00000002, 0)

它崩溃了VM。 如果我在

中调用相同的方法
WindowListener.windowClosing()

挂钩,调用不会崩溃虚拟机。

知道为什么吗?

如果可能有任何用途,我可以发布部分VM崩溃错误报告。

编辑:请参阅VM crash report on pastebin

2 个答案:

答案 0 :(得分:0)

发布VM崩溃报告应该有所帮助。

答案 1 :(得分:0)

发布关于pastebin等的崩溃报告的部分内容,也许有些人可以从中获得一些信息。

嗯,我不确定,但如果您阅读了addShutdownHook()

的java文档
  

关机挂钩在微妙的时间运行   在虚拟机的生命周期中   因此应该防御性地编码。   他们应该在   特别是,写得很好   线程安全并避免死锁   尽可能的。他们也应该   不要盲目依赖服务那   可能已经注册了自己的关机   钩子,因此可能自己   关闭的过程。   ....   关闭挂钩也应该完成   他们的工作很快。   ...

这些让我得出的结论是,调用这样的方法可能需要来自JVM的服务,这些服务不再可用,或者这个调用需要的时间太长。