我有一个使用2400x1800缓冲图像的应用程序(我知道它需要大量资源),但它在90%以上的时间内完美运行。占用130 MB RAM并使用5%的CPU。
问题是,10%的时间,它有一个很大的延迟,只消耗40到50 MB的RAM,并使用50%的CPU。为什么不吃同样的记忆?
我知道我应该发布一些代码,但应用程序真的很大,可能会对这个特定问题进行一些讨论的链接会有很大的帮助。
答案 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 命令行。