【发布时间】:2014-05-30 05:11:39
【问题描述】:
您好,我正在使用 jdk7 和 6GB 内存和英特尔 corei5 处理器。我有一个 java 代码,它的数组列表大小超过 6000,并且该数组列表中的每个元素都包含 12 个双精度值。处理速度下降了很多,并且现在运行整个代码大约需要 20 分钟。
代码的作用如下:
由于嵌套的 for 循环,发生了大约 4500 次迭代。在每次迭代中,都会读取一个 400 kb 的文件,并进行一些处理,并将一些值存储在 arraylist 中。
一旦 arraylist 准备好,arraylist 的值将通过 csvwriter 写入另一个文件。然后我使用了 jtable,jtable 还需要 arraylist 来引用该 arraylist 中的某些值。所以基本上我无法清除这个 arraylist。
我给堆内存的值如下
-Xms1024M -Xmx4096M
我是编程新手,我很困惑我应该怎么做?我可以增加堆大小吗?这有帮助吗?我的学长建议使用硬盘内存来存储数组列表元素或处理,但我怀疑如果可能的话。 请帮助。任何帮助将不胜感激
【问题讨论】:
-
这听起来不像是内存问题,因为
8*12*6000 = 576000小于 1 MB。听起来更像你有一个算法问题。如果您更新您的问题,并提供有关您正在执行的处理的更多详细信息,我们可能会提供更好的帮助。 -
我怀疑这是内存问题。尝试添加一些分析信息(甚至使用分析器)。
-
4500 次迭代...嵌套 for 循环...让我向您保证,与调整堆的最大大小相比,这两个危险信号 远 更有利可图的优化点.
-
我说堆大小是个问题,因为我有两次 OutOfMemoryError 之后我将内存增加到 4096M
-
那么你在其他地方分配内存而不告诉我们。 :)
标签: java performance