繁体   English   中英

java / swing:gui冻结,没有线程挂起

[英]java/swing: gui froze, no thread suspended

首先,它是一个巨大的应用程序,问题涉及很多行,因此我无法真正附加任何代码。

在主要包含清除和重新添加元素到集合中的更改之后,应用程序的摆动GUI冻结。 冻结不会在执行添加的代码时发生,而是在一段时间后发生。 奇怪的是没有线程被挂起。

我的问题是无限循环是否是对此问题的唯一解释。 在我看来,这是不可能的,因为添加的代码可以毫无问题地完成。 可能存在一些不同步的集合访问问题,但我认为不会导致这种情况。 由于没有线程被挂起,因此看起来也不像我们正在处理来自同步问题的死锁。

庞大的应用程序+操纵集合->垃圾收集器开始了?

SO上的一些相关阅读: 增加maxpermsize和最大堆大小的副作用

以及有关GC调优的Oracle文章: http : //www.oracle.com/technetwork/java/gc-tuning-5-138395.html

这可能是由于执行事件的摆动中的事件调度程序线程中等待(由于某些繁重的处理)所致。 理想情况下,您应该在单独的线程中执行任何占用大量资源的任务,以使UI不会冻结

您可能已经知道这一点,但是仅出于此目的,我要说的是,如果您没有在应用程序的长期运行过程中使用Swing worker,那么使用它是一种理想的情况。

最后,这是一个僵局

我的团队负责人告诉我,在监视器(“同步”上)上等待的线程不会在Eclipse中显示为已暂停。 他找到了两个线程并要求暂停它们。 然后我看到他们在互相等待释放被占用的显示器。

死锁不是我输入的代码的错。 只是我所做的更改在其他地方显示了错误的同步。

谢谢大家为我提供的帮助,我非常感谢。 这是我关于stackoverflow的第一个问题,我很惊讶您的反应速度如何。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM