首先,它是一个巨大的应用程序,问题涉及许多行,所以我无法真正附加任何代码。
在主要包括清除和重新添加元素到某个集合的更改之后,应用程序的swing GUI冻结。在执行添加的代码但稍后执行时,不会发生冻结。奇怪的是没有线程被暂停。
我的问题是无限循环是否是这个问题的唯一解释。这种情况不太可能,因为添加的代码完成没有问题。 可能存在一些不同步的集合访问问题,但我没有看到它导致这种情况。它看起来也不像我们正在处理来自同步问题的死锁,因为没有线程被挂起。
答案 0 :(得分:0)
庞大的应用程序+操纵集合 - >垃圾收集器开始了?
SO的一些相关阅读: side effect for increasing maxpermsize and max heap size
关于GC调优的Oracle文章: http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
答案 1 :(得分:0)
可能是因为在执行事件的swing中的Event调度程序线程中等待(由于一些繁重的处理)。理想情况下,您应该在单独的线程中执行任何资源密集型任务,以便UI不会冻结
答案 2 :(得分:0)
您可能已经知道这一点,但仅仅是为了它,我会说如果您在应用程序中长时间运行的进程中没有使用Swing工作程序,这将是一个理想的使用方式。
答案 3 :(得分:0)
最后它是死锁。
我的团队负责人告诉我,在监视器上等待的线程(在“同步”上)没有在eclipse中显示为暂停。他找到了两个线程并要求暂停它们。然后我看到他们正在等待对方释放被占领的监视器。
死锁不是我输入的代码的错误。只是我所做的改变在其他地方显示出错误的同步。
谢谢大家试图帮助我,我真的很感激。这是我关于stackoverflow的第一个问题,我很惊讶你的反应有多快。