我想计算 JAVA 中二维数组列表中每对元素之间的 Euclidean 距离。这二维数组列表由40个维度的40000条记录组成。我遇到了内存不足的问题:
线程“ main”中的异常java.lang.OutOfMemoryError:Java堆空间
我将堆内存大小增加为: Xmx16000M (16Gb RAM)。但是问题也存在。那么,如何摆脱内存不足的问题呢?在下面的内容中,您将看到完全描述我的代码的伪代码。谢谢所有受访者。
ArrayList<ArrayList<Double> dataset = new ArrayList<ArrayList<Double>>();
dataset = readDataset(); // a method returns data to my 2-d arraylist
//now I have 40000 records in 40 dim in dataset!
distanceMatrix = new double[dataset.size()][dataset.size()];
for (int i=0 ; i<dataset.size(); i++) {
for (int j=0 ; j<(dataset.size()-i); j++) {
if (i == j) {
distanceMatrix[i][j] = 0.0;
continue;
}
double ans= getDistance(dataset.get(i), dataset.get(j));
distanceMatrix[i][j] = ans;
distanceMatrix[j][i] = ans;
}
}
public double getDistance(ArrayList<Double> a , ArrayList<Double> b) {
double dist=0;
for (int i = 0; i < 40; i++) {
double c = Math.abs(a.get(i) - b.get(i));
dist += Math.pow(c, 2);
}
dist = Math.sqrt(dist);
return dist;
}