java - Java ( Collection的Collection ) 方法是否强制垃圾 Collection的元素?

  显示原文与译文双语对照的内容
0 0

我编写了一个Java程序来构建一个巨大的arraylist ( 拥有超过 7万的元素) 。 然后,我将在这里元素的元素上迭代,我建立了一个第二个 arraylist,它的大小也像。 在迭代期间,当超过GC开销限制时,会出现内存异常。

在任何时候,我都想一个类似于 2nd 个arraylist的大小,将它的元素保存到一个文件或者数据库表中,然后调用上的。 但是这种调用会强制使用元素的垃圾 Collection? 如果没有那么我的问题仍然没有解决。

谢谢你的建议。

时间:原作者:4个回答

0 0

调用 removeAll 将不会触发垃圾 Collection,并且手动触发垃圾 Collection 将无法帮助。 让垃圾 Collection 按要求发生。 ( 你可以确定它会在你的应用程序得到运行之前运行。 只有在运行完整的GC后没有足够的空间,才会引发 OOME

你需要做的是减少可以访问对象的数量和大小。 这意味着垃圾 Collection 运行时,它将回收更多垃圾,你的应用程序将能够继续运行。

这听起来像限制 2nd array 大小的策略可以以帮助减少可以达到的对象的工作集。 另一个可能是使用 ArrayList.set(pos, null) 使第一个列表中不再需要的条目无效。 但是,在你的问题中没有足够的细节来帮助你。

或者,只需增加jvm堆大小的最大。

原作者:
0 0

垃圾回收器将根据需要自动运行。 你可以通过 System.gc() 手动调用它,但这对你的情况没有帮助。

这里有一个 post post,解释了错误的含义以及如何将它的禁用:

如果在垃圾 Collection 中花费太多的时间,并行/并发收集器将引发 OutOfMemoryError: 如果在垃圾 Collection 中花了 98%以上的总时间,并且恢复了小于 2%的堆,将抛出一个,。 这个特性是为了防止应用程序在一段时间内运行,因为堆太小,因为堆太小。 如果需要,可以通过向 命令行 中添加 -XX:-UseGCOverheadLimit 来禁用这里功能。

原作者:
...