清理大型Java集合/列表以便于内存使用

清理大型Java集合/列表以便于内存使用,java,set,Java,Set,我有一个大的整数集,包含大约5.3M的整数,然后我将这个集传递给方法1进行处理。在那之后,我还有很多步骤要做,我的问题是这个大整数集,它会消耗大量内存。有没有什么方法可以在方法1之后释放这些内存,以便在没有内存不足的情况下执行下面的方法 我尝试了以下方法: myBigIntegerSet.clear() 及 我不知道这是否有助于提高内存使用率,如果有,哪一个更好?谢谢 一个对象只能在无法再访问该对象时进行垃圾收集。在下面的例子中: Set<Integer> myBigInteger

我有一个大的整数集,包含大约5.3M的整数,然后我将这个集传递给方法1进行处理。在那之后,我还有很多步骤要做,我的问题是这个大整数集,它会消耗大量内存。有没有什么方法可以在方法1之后释放这些内存,以便在没有内存不足的情况下执行下面的方法

我尝试了以下方法:

myBigIntegerSet.clear()


我不知道这是否有助于提高内存使用率,如果有,哪一个更好?谢谢

一个对象只能在无法再访问该对象时进行垃圾收集。在下面的例子中:

Set<Integer> myBigIntegerSet= new HashSet<Integer>();
Map<String, Set<Integer>> myMap = new HashMap<String, Set<Integer>>();
Mymap.put("test", myBigIntegerSet);
myBigIntegerSet= null;

取消所有引用myBigIntegerSet的对象应该可以解决这个问题。我建议使用object的finalize方法来完成此操作。

使用
null
,您可能会有一个额外的object GC'ed。这似乎是一个要求:使对象被GCed,以便释放空间。但GC不在开发人员的控制之下。因此,您永远无法确定GC是否会在(可能是)“内存不足”错误之前/之后运行。@b如果不首先尝试回收内存,JVM不会抛出
OutOfMemoryError
。如果您看到一个
OutOfMemoryError
,则可以确定垃圾收集器在抛出之前已经运行,但无法释放足够的空间继续执行。@JonK我同意。我的错误。GC将在抛出内存之前至少运行一次
Set<Integer> myBigIntegerSet= new HashSet<Integer>();
Map<String, Set<Integer>> myMap = new HashMap<String, Set<Integer>>();
Mymap.put("test", myBigIntegerSet);
myBigIntegerSet= null;
myBigIntegerSet.clear();