我遇到了一个问题,我找不到解决方案。我正在使用 HashSet 来存储值。我存储的值是自定义类型 Cycles,其中我已经覆盖了 HashCode 并等于以下内容,以确保低速性能不受 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;
}
在第一个 1.500.000 个值之后,当我尝试添加一个新值(使用 HashSet 类的 add 方法)时,程序非常慢。最终,在存储的值达到 1.600.000 之前,我将遇到 java 内存不足异常(线程“Thread-0”java.lang.OutOfMemoryError:Java 堆空间中的异常)
我使用的 IDE 是 Eclipse。所以下一步是将 JVM 堆大小从默认值增加到 1 giga(使用命令 Xmx1000M 和 Xms1000M)现在椭圆开始时可用内存增加 10 倍(我可以在右下角看到总堆大小显示内存和已用内存)但我再次具有与以前相同的值(在 1.500.000 之后和 1.600.000 之前)相同的“慢”性能和相同的内存不足错误,这很奇怪。
有谁知道这可能是什么问题?
先感谢您