win*_*ngs 6 java memory jvm hashset
我想在HashSet中处理一些新数据,不需要任何旧数据或旧的HashSet对象.其他地方没有引用旧的HashSet对象.
简单地做hashset = new HashSet<String>()并让JVM释放旧HashSet对象的内存或者我应该调用hashSet.clear()并重用相同的HashSet 是否更好?
根据openJDK,hashSet.clear()是:
public void clear() {
map.clear();
}
Run Code Online (Sandbox Code Playgroud)
和map.clear():
public void clear() {
modCount++;
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
tab[i] = null;
size = 0;
}
Run Code Online (Sandbox Code Playgroud)
由于map.clear()会迭代所有条目,所以当hashSet很大时会耗费时间吗?在这种情况下推荐使用哪一个,构造函数方法或clear()方法?
清除 HashSet 是不必要的 - 只需删除对 HashSet 的所有引用(如果您编写hashset = new HashSet<>();,就会发生这种情况,假设旧的 HashSet 在其他任何地方都没有引用),垃圾收集器将完成其余的工作。
另请注意,假设您需要一个相同大小的新 HashSet,则调用hashset.clear()比简单地创建一个具有适当容量的新 HashSet 需要更多时间