マップ内の距離を取得しようとしていますが、Javaヒープエラーが発生しています。データがマップに格納されていると、なぜか特別な理由がわかりません。ここでJavaヒープエラー
が私のコードです:
Map<Integer, double[]> getDistanceTable(Map<String, Double[]> vectors) {
Map<Integer, double[]> distance = new HashMap<>();
int size = vectors.keySet().size();
for(int i=0; i<vectors.keySet().size(); i++) {
double[] features = new double[size];
int index = 1;
features[0] = 0;
for(int j = i+1; j<vectors.keySet().size(); j++) {
features[index] =new QueryClustering().getDistance(vectors.get(i), vectors.get(j));
index++;
}
distance.put(i, features);
size--;
}
return distance;
}
}
getDistanceは大きなオブジェクトを返し、あなたがこのタイプの非常に多くのインスタンスを持っているかもしれない新しいQueryClustering()ので。ヒープに収まらないマップ –
各繰り返しで新しいQueryClusteringオブジェクトを作成しないでください。 'for'の外に作成し、 'for'句の中でメソッドgetDistance(...)を呼び出してみてください。 –
正確なエラーメッセージを含め、詳細を教えてください。私が見ることができる(関連のない)問題は、あなたが 'vectors.get(i)'をやっているということです。 'i'は' int'ですが、 'vectors'のキータイプは' String'です。 –