0
我寫了下面的函數計算成本矩陣,並將其存儲在CSV文件:在CSV存儲體2D矩陣:java.lang.OutOfMemoryError
private static void calculateCostMatrix()
{
int len = _POIs.size();
CostMatrix = new double[len][len];
for (int i=0; i<len; i++)
{
int ic = _POIs.get(i).getId();
for (int j=i; j<len; j++)
{
int jc = _POIs.get(j).getId();
double dist = euclideandist(_POIs.get(i).getLat(),_POIs.get(i).getLon(),
_POIs.get(j).getLat(),_POIs.get(j).getLon());
CostMatrix[ic][jc] = dist;
CostMatrix[jc][ic] = dist;
}
}
// Save in CSV
try
{
String NEW_LINE = System.getProperty("line.separator");
File file = new File("CostMatrix.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
StringBuilder sb = new StringBuilder();;
for (double[] row : CostMatrix)
{
for (double d : row)
{
sb.append(d);
sb.append(",");
}
sb.append(NEW_LINE);
}
bw.write(sb.toString());
bw.close();
}
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
但是,很明顯,由於大量元素(200,000 X 200,000)我收到消息java.lang.OutOfMemoryError: Java heap space
。
因此,而不是預先分配的CostMAtrix一個空間,我現在想直接計算和存儲在CSV文件中的每個細胞。 我該如何以正確的方式做到這一點?
謝謝。你能給一個例子的鏈接嗎?另外,我需要在迭代計算中使用CostMatrix。因此,這意味着在計算CostMatrix並將其存儲爲CSV後,我需要以某種方式加載此文件,以便能夠從我的動態算法中訪問CostMAtrix [i] [j]。 –
作爲隨機訪問訪問CSV文件本質上非常緩慢且困難。您應該考慮將二進制文件作爲最終結果並在此工作。 https://docs.oracle.com/javase/tutorial/essential/io/rafs.html –
好的。我也在評估NEO4j,但我不確定.. http://neo4j.com/developer/get-started/ –