【发布时间】:2014-01-01 04:05:31
【问题描述】:
我在某些用户的机器上使用我的 swing 应用程序看到了一些有趣的行为。不知道有没有人遇到过类似的情况?
该应用占用大量内存,我们最近一直在使用 Xms==Xmx==512M 对其进行部署
有问题的用户机器是 Windows Xp 机器、4gb 内存、双核处理器和一个 512M NVidia NVS300 显卡。他们正在运行多个监视器设置;一个用户有 2 个,另一个有 4 个。
我们看到该应用在一段时间内运行良好。然后,由于某种原因,它变慢了 - 重新绘制变得非常缓慢,并且应用程序开始搅动 cpu。
问题是;如果您将屏幕拖到任何其他显示器上,则 CPU 使用率会下降,并且应用会再次开始正常响应。
我猜这是与内存有关的,因为当使用的堆增加时会发生这种情况,但是我无法解释原因。我们之前使用 -Xms256M 进行部署,据我所知,使用该配置运行时没有人报告此问题。
谁能帮忙解释一下可能发生了什么?
谢谢, 理查德
【问题讨论】:
-
用户可以有多个框架,但我已经看到它只发生在一个框架上。顺便说一句,它使用 Jide 对接框架。
-
在我看来更像是重绘问题而不是多显示问题。你确定你没有在你的绘制方法中集中创建对象并且从不释放引用吗?也许更多的显示器会放大效果......我肯定会在那里检查,或者让它在一台显示器机器上运行几天。
-
我认为你应该检查你的回调函数。检查所有绘图方法,尽量避免在回调函数中分配内存和静态变量。同样的事情你需要检查你所有的渲染。几天前我在我们的应用程序中发现了类似的问题,即如果应用程序运行时间更长,它就会变慢。您还可以检查这些函数是否有繁重的计算,并尝试优化这些函数中的计算。
-
您可以使用visualVM检查到底是什么问题,您可以轻松找到内存泄漏、线程泄漏、Cpu利用率等等,并且可以在您单击按钮或打开或关闭任何窗口时分析数据还有更多。我们还能够使用 VisualVM 捕获这些东西。您可以尝试一次。