Pit*_*elk 6 java performance hashset
我遇到了一个问题,我无法找到解决方案.我正在使用HashSet来存储值.我存储的值是自定义类型Cycles,其中我已重写HashCode并等于如下,以确保缓慢的性能不受hascode或相等方法的影响我还将hashset的初始容量设置为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;
}
Run Code Online (Sandbox Code Playgroud)
在第一个1.500.000第一个值之后,当我尝试添加一个新值(使用HashSet类的add方法)时,程序非常慢.最终我将在存储的值达到1.600.000之前让java内存异常(线程中的异常"Thread-0"java.lang.OutOfMemoryError:Java堆空间)
我使用的IDE是Eclipse.所以下一步是将JVM堆大小从默认值增加到1千兆(使用commnads Xmx1000M和Xms1000M)现在,elipse以可用内存的10倍开始(我可以看到右下角的总堆大小)显示内存和使用的内存)但同样我有相同的"慢"性能和相同的内存错误在相同的值(之前的1.500.000和1.600.000之前)非常奇怪.
有谁知道它可能是什么问题?
先感谢您