Java应用程序占10%的时间

时间:2011-05-02 13:42:19

标签: java image memory lag buffered

我有一个使用2400x1800缓冲图像的应用程序(我知道它需要大量资源),但它在90%以上的时间内完美运行。占用130 MB RAM并使用5%的CPU。

问题是,10%的时间,它有一个很大的延迟,只消耗40到50 MB的RAM,并使用50%的CPU。为什么不吃同样的记忆?

我知道我应该发布一些代码,但应用程序真的很大,可能会对这个特定问题进行一些讨论的链接会有很大的帮助。

5 个答案:

答案 0 :(得分:0)

通过分析器运行它。 JProfiler是一个很好用的。

答案 1 :(得分:0)

你是一次性加载图片吗?为什么不平铺它并制作一些加载图像的线程?如果加载View的程序部分太大,为什么不将它扩展到线程中呢?需要更多建议吗?

祝你好运

答案 2 :(得分:0)

首先,即使对于2400x1800图像,130Mb也很多,这意味着您每像素消耗27Byte。

对于经典的32位/像素(或4字节)图像,您只需要16-17MB

根据你的说法,你可能会在调用垃圾收集器之前消耗越来越多的内存,而且它需要做很多工作才能释放内存。

您可能需要: - 增加可用的最大内存 - 调整垃圾收集器以进行更小的暂停,但更常见。

编辑:也许您创建了大量这种大小的新图像而不是更新它们,这会导致大量的内存分配和内存耗尽?

答案 3 :(得分:0)

这个问题很少发生,但应用程序的定期减速通常是由于garbage collection。运行jvisualvm并查看与内存相关的图表。如果您看到锯齿状图案的峰值与性能下降的开始时间一致,那么这会导致您的应用程序因为垃圾收集器处理大量对象而变慢。这可能是浪费在代码中创建对象的风险,或者您可能只需要为虚拟机分配更多内存。

以下是

的指南

答案 4 :(得分:0)

也许运行像Xmx这样的JVM参数(这是可供应用程序使用的最大大小)和Xss(这是该应用程序的起始内存)可以帮助你。

在你的日食中尝试这个(假设你使用它)

转到 RUN 菜单,

然后运行配置...

然后选择你的跑步者。

并点击(x)=参数标签。

将此添加到您的VM参数

-Xmx512m -Xss150m

尝试运行它...这将使您的JVM启动时至少已经分配了150mb的可用RAM ......

如果不使用eclipse,只需将这些参数添加到 java 命令行。