我试图了解内存泄漏的各种原因,我看到的示例之一是实现 hashCode() 而不是 equals()。我已经通读了一个,如果一个被过度使用,另一个也必须因为违反合同而被过度使用。
这是示例代码
import java.util.HashMap;
import java.util.Map;
public class MemoryLeak {
static class Key {
Integer id;
Key(Integer id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Map m = new HashMap();
while (true)
for (int i = 0; i < 10000; i++)
if (!m.containsKey(i))
m.put(new Key(i), "Number:" + i);
}
}
我知道我没有故意实现 equals() 方法。但我想了解为什么内存泄漏是内部发生的事情。
谢谢