可能重复:
如何避免回调中的内存泄漏?
有效的Java说:
内存泄漏的第三个常见来源是侦听器和其他回调.如果您实现客户端注册回调但未明确注销回调的API,则除非您采取某些操作,否则它们将累积.确保回调被及时垃圾回收的最佳方法是仅存储对它们的弱引用,例如,通过仅将它们存储为WeakHashMap中的键.
我无法理解这一点.有人能解释一下吗?
为什么以下代码在调用集合上打印不同的哈希码排序方法请告诉我为什么会出现这种行为?
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add((int) (Math.random() *100));
}
System.out.println("Before List =" + list);
System.out.println("object hashcode-1 =" + list.hashCode());
Collections.sort(list);
System.out.println("In >>> object hashcode-1 =" + list.hashCode());
Collections.sort(list,new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return (o1.intValue() > o2.intValue() ?-1:1);
}
});
System.out.println("object hashcode-2 =" + list.hashCode());
System.out.println("After List =" + list);
Collections.sort(list,Collections.reverseOrder());
System.out.println("object hashcode-3 =" + list.hashCode());
System.out.println("Reverse Order List =" + list);
Run Code Online (Sandbox Code Playgroud)
输出是:
Before …Run Code Online (Sandbox Code Playgroud)