Я хочу вычислить Евклидово расстояние между каждой парой элементов в списке двумерного массива в JAVA . Этот список двухмерного массива состоит из 40000 записей в 40 измерениях. Я столкнулся с проблемой дефицита памяти:
Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java
Я увеличил размер кучи-памяти до: Xmx16000M (16 ГБ ОЗУ). но проблема также существует. Итак, как я могу избавиться от проблемы с нехваткой памяти? Ниже вы можете увидеть псевдокод , который точно описывает мой код. Спасибо всем опрошенным.
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;
}