1

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

问题是,在 10% 的情况下,它有很大的延迟,只消耗 40 到 50 mb RAM 并使用 50% 的 CPU。为什么它不吃同样的记忆?

我知道我应该发布一些代码,但是该应用程序确实很大,指向可能会谈论这个特定问题的内容的链接会很有帮助。

4

5 回答 5

0

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

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

进入运行菜单,

然后运行配置...

然后选择你的跑步者。

并单击(x)=Arguments选项卡。

将此添加到您的 VM 参数中

-Xmx512m -Xss150m

尝试运行它...这将使您的 JVM 以已分配给它的至少 150mb 空闲 RAM 启动...

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

于 2011-05-02T14:11:07.603 回答
0

首先,130Mb 很多,即使是 2400x1800 的图像,这意味着每个像素消耗 27Byte。

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

其次,从您所说的来看,您似乎消耗了越来越多的内存,直到调用了垃圾收集器并且它做了很多工作来释放内存。

您可能需要: - 增加可用的最大内存 - 调整垃圾收集器以使暂停更小但更频繁。

编辑:也许您创建了很多这种大小的新图像而不是更新它们,从而强制进行大量内存分配和内存取消分配?

于 2011-05-02T13:51:54.403 回答
0

通过探查器运行它。JProfiler 是一个很好用的工具。

于 2011-05-02T13:45:58.440 回答
0

你是用一张照片加载图片吗?为什么不平铺它并制作一些加载图像的线程?如果加载视图的程序部分如此之大,为什么不把它分散在线程中呢?需要更多建议?

祝你好运

于 2011-05-02T13:47:10.723 回答
0

这个问题几乎没有什么可继续的,但应用程序的周期性减速通常是由于垃圾收集。运行jvisualvm并查看与内存相关的图表。如果您看到一个锯齿模式,其峰值与性能下降的开始同时出现,那么这表明您的应用程序由于垃圾收集器处理大量对象而变慢了。这可能是由于在代码中浪费了创建对象,或者您可能只需要为 vm 分配更多内存。

这是一个指南

于 2011-05-02T13:54:13.637 回答