解決策が見つからない問題が発生しました。値を格納するために HashSet を使用しています。私が保存する値はカスタムタイプのCyclesであり、HashCodeとequalsを次のようにオーバーライドして、パフォーマンスの低下がhascodeまたはequalメソッドによって引き起こされていないことを確認しますまた、ハッシュセットの初期容量を10.000に設定しました.000
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (cycleId ^ (cycleId >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cycle other = (Cycle) obj;
if (cycleId != other.cycleId)
return false;
return true;
}
(HashSet クラスの add メソッドを使用して) 新しい値を追加しようとすると、最初の 1.500.000 の最初の値の後、プログラムは非常に遅くなります。最終的に、格納された値が 1.600.000 に達する前に、Java のメモリ不足例外 (スレッド "Thread-0" java.lang.OutOfMemoryError: Java ヒープ領域の例外) が発生します。
私が使用するIDEはEclipseです。したがって、次のステップは、JVM ヒープ サイズをデフォルト値から 1 ギガに増やすことでした (コマンド Xmx1000M および Xms1000M を使用)。これで、楕円が 10 倍のメモリを使用して開始されます (右下で合計ヒープ サイズが表示されていることがわかります)。メモリと使用済みメモリが表示されます)が、以前と同じ「遅い」パフォーマンスと同じ値のメモリ不足エラー(1.500.000の後と1.600.000の前)があり、非常に奇妙です。
誰がそれが問題である可能性があるか考えていますか?
前もって感謝します