我有一个使用 2400x1800 缓冲图像的应用程序(我知道这需要大量资源),但它在 90% 以上的时间里都能完美运行。占用 130 mb 的 RAM 并使用 5% 的 CPU。
问题是,在 10% 的情况下,它有很大的延迟,只消耗 40 到 50 mb RAM 并使用 50% 的 CPU。为什么它不吃同样的记忆?
我知道我应该发布一些代码,但是该应用程序确实很大,指向可能会谈论这个特定问题的内容的链接会很有帮助。
也许运行像 Xmx(这是应用程序可以使用的最大大小)和 Xss(这是该应用程序的起始内存)这样的 JVM 参数可以帮助您。
在你的日食中试试这个(假设你使用它)
进入运行菜单,
然后运行配置...
然后选择你的跑步者。
并单击(x)=Arguments选项卡。
将此添加到您的 VM 参数中
-Xmx512m -Xss150m
尝试运行它...这将使您的 JVM 以已分配给它的至少 150mb 空闲 RAM 启动...
如果不使用 eclipse,只需将这些参数添加到您的java命令行中。
首先,130Mb 很多,即使是 2400x1800 的图像,这意味着每个像素消耗 27Byte。
对于经典的每像素 32 位(或 4 字节)图像,您只需要 16-17MB
其次,从您所说的来看,您似乎消耗了越来越多的内存,直到调用了垃圾收集器并且它做了很多工作来释放内存。
您可能需要: - 增加可用的最大内存 - 调整垃圾收集器以使暂停更小但更频繁。
编辑:也许您创建了很多这种大小的新图像而不是更新它们,从而强制进行大量内存分配和内存取消分配?
通过探查器运行它。JProfiler 是一个很好用的工具。
你是用一张照片加载图片吗?为什么不平铺它并制作一些加载图像的线程?如果加载视图的程序部分如此之大,为什么不把它分散在线程中呢?需要更多建议?
祝你好运