我写了一个java程序,它从自己的线程中的com端口读取数据并将其放入数据库中。当发生异常(数据库或com)时,它会使用runtime.exec重新启动。经过一天左右,程序有时会冻结。我无法追踪这发生的确切时间,但似乎在一段时间后会发生。 你们中的一个人知道可能是什么问题? 谢谢!Java程序冻结
Q
Java程序冻结
0
A
回答
1
如果你只是简单地捕捉到IO异常并执行runtime.exec,那么由于JVM过多,你可能会发生内存不足......你确定旧的程序(和JVM)在完成一个新的的Runtime.exec?也就是说,正如@extraneon所说的,你确定你的程序没有创建你的程序的另一个实例,这又创建了你的程序的另一个实例,......?
0
0
取决于你如何实现你的软件,你可能有一个设计问题。
如果您从初学者应用程序使用Runtime.exec(),那很好。如果你有这样的:
try {
doStuff();
} catch(Throwable t) {
Runtime.exec(...);
}
你会得到你的软件的多个副本运行,每次服用一些资源和永不放弃的那些回来。在这种情况下,您实际上应该清理失败的线程并启动一个新的线程(如果可能的话)。
只要是明确的,在我看来,首发的应用程序是一些与主没有太多超过:
while(true) {
Process p = Runtime.exec(your COM communication program);
if (p.waitFor() == 0 { // Clean exit
break; // exit while loop.
}
// Otherwise p closed with an error and a new process should be started
// which is done in the next iteration of the loop
}
0
当您使用的Runtime.exec启动进程()是你消耗标准输出和stderr流?如果否,则应用程序在填充OS缓冲区时会冻结。根据应用程序产生多少输出以及抛出异常的频率,您的数字可能会有所不同。
相关问题
- 1. Java应用程序冻结
- 2. 序列化java冻结我的程序
- 3. Java Swing按钮冻结程序
- 4. Java:虽然循环冻结程序
- 5. java应用程序冻结mac os 10.9
- 6. Java客户端应用程序冻结
- 7. JSlider冻结程序
- 8. SDL程序冻结
- 9. DispatchGroup.wait()冻结程序
- 10. libusb:libusb_control_transfer冻结程序
- 11. Timer_Tick冻结程序
- 12. Java JFrame冻结
- 13. EventListener冻结(Java)
- 14. java inputStream冻结
- 15. 挂接java应用程序崩溃/冻结应用程序
- 16. Swing应用程序冻结
- 17. Winform应用程序冻结
- 18. Python动作冻结程序
- 19. x86程序冻结[tasm]
- 20. Javafx Alert使程序冻结
- 21. C++程序无故冻结
- 22. 程序与NAudio冻结
- 23. Tkinter帆布冻结程序
- 24. WPF应用程序冻结
- 25. Popen导致程序冻结
- 26. JPGEncoder冻结应用程序
- 27. UIWebthreadlock冻结应用程序
- 28. iPhone应用程序冻结
- 29. C++程序严重冻结
- 30. 程序在oWord.Documents.Open(oTemplatePath)冻结?
它多频繁地监听端口或读取数据? – 2010-11-22 10:15:50
这是否意味着在某些时候,您的应用程序正在运行另一个应用程序副本,该应用程序会运行另一个应用程序副本等等(取决于例外情况)? – extraneon 2010-11-22 10:16:12
可能的重复http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems – Raedwald 2016-01-29 03:37:39