gpt4 book ai didi

java - 如何写入文件以避免OutOfMemoryError

转载 作者:行者123 更新时间:2023-12-01 21:55:04 26 4
gpt4 key购买 nike

尽管我增加了项目的内存,但以下函数会遇到 java.lang.OutOfMemoryError 错误。这发生在 sb.append(CostMatrix[k][j]); 行我猜原因是写入文件效率低下。与其将所有数据存储在 CostMatrix 中,最好逐行写入文件,每次更新 sb。如何实现?

private static void saveDistanceMatricesToCSV(int i, List<Object[]> data)
{
System.out.println("Saving distance matrix " + i + " to CSV");
try
{
String NEW_LINE = System.getProperty("line.separator");
File file = new File("clusters/d"+i+".csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
StringBuilder sb = new StringBuilder();

int len = data.size();
double[][] CostMatrix = new double[len][len];
for (int k=0; k<len; k++)
{
for (int j=k; j<len; j++)
{
double lat1 = (Float) data.get(k)[3];
double lon1 = (Float) data.get(k)[4];
double lat2 = (Float) data.get(j)[3];
double lon2 = (Float) data.get(j)[4];
double dist = distfunc(lat1,lon1,lat2,lon2);
CostMatrix[k][j] = dist;
CostMatrix[j][k] = dist;
}
}

for (int k=0; k<len; k++)
{
for (int j=0; j<len; j++)
{
sb.append(CostMatrix[k][j]);
sb.append(",");
}
sb.append(NEW_LINE);
}
bw.write(sb.toString());
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}

最佳答案

我发现效率低下的原因有多种。您正在做 2 组相同的周期:

  • 第一对:迭代数据结构并填充CostMatrix(顺便说一下,在java中变量名称以小写字母开头)
  • 第二对:迭代CostMatrix以填充StringBuilder

正如 Berger 已经告诉您的那样,您可以避免使用 StringBuilder,但我也会删除第二个 for 循环,删除 CostMatrix 的内存使用以及在前几个周期中直接移动写入指令。

关于java - 如何写入文件以避免OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34495173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com