【发布时间】:2012-02-11 18:58:39
【问题描述】:
我用 Spring 开发了一个应用程序。我有一个 bean 来创建一个线程,但是在这个线程的执行过程中,在运行时,JVM 会抛出 OutOfMemoryError - Java Heap Space。
我要问的是以下解决方案是否适合解决问题:
一旦抛出线程死亡并释放线程先前占用的内存,然后我通过另一个线程(我称之为 RestartThread),我意识到线程已经死亡(没有捕获错误),然后:
1) 调用垃圾收集器,有效释放死线程的内存;
2) 调用死线程的run()函数,重新启动死线程的前一个实例(包括死线程使用的私有变量,即使在产生'OutOfMemoryError'后仍保留在内存中)。
您如何看待这件事,它可能会产生问题?重新启动先前死亡线程的正确解决方案是否正确?
在此先感谢,
--Alucard
【问题讨论】:
-
您可能应该找出内存不足的原因(例如泄漏引用或您的应用程序需要的内存比您给它的更多)并尝试修复它,而不是尝试恢复来自OOM(这可能是最困难的)
标签: java multithreading spring out-of-memory restart