我有一个 Java swing 应用程序,它订阅大量数据并以各种方式显示这些数据。在重负载下,我遇到 JRE 只是停止工作并显示消息“Java(TM) Platform SE 二进制文件已停止工作”。这显然会关闭我的应用程序,我需要重新启动它。我尝试在 google 上搜索解决此问题的方法,因为我的代码中没有堆栈跟踪,也没有任何我可以使用的内容,但除了升级/重新安装 JRE 和运行病毒扫描之外,我发现几乎没有什么有用的信息。我已经采取了这两项措施并重新启动了服务器,但问题仍然存在。我尝试使用 Java VisualVM 监视该过程(请参阅下面的转储),但我不是这个工具的专家,可能不知道要寻找什么。我的观察结果是,“崩溃”似乎与垃圾收集同时发生。
该问题很容易重现,并且会在运行应用程序大约 10 分钟后发生。我不使用任何特定的 jvm 参数运行应用程序。 Java 版本是 1.6.0_31(升级前是 _25),我在 Windows 7 64 位上运行。
在 VisualVM 的下图中,Java 二进制文件刚刚停止工作,这似乎与 GC 运行一致。
非常感谢您提供任何帮助或想法,以便我能够解决或解决问题。谢谢。
最佳答案
需要检查的三件事:
如果您在任何地方实现了
finalize()
方法,请确保它不会直接或间接锁定任何对象;这可能会导致与 GC 相关的灾难性死锁。如果您有 native 代码,如果代码未正确使用全局引用,则可能会发生许多奇怪的事情,包括死锁和奇怪的内存损坏,这又与 GC Activity 相关。
最后,GC 可能只是“搅局”并暴露应用程序中本来存在的普通死锁;检查您的同步协议(protocol)。
关于swing - Java SE 二进制崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10285717/