0

我正在创建一个 java 程序,其中一些数据被添加到一个数组列表中。

一些处理在一个循环中,我在循环内的列表中添加一个新节点,使用该节点执行操作,然后在循环迭代结束之前使用 arraylist.remove() 删除该节点。我也在运行 System.gc(); 就在循环迭代结束之前。

但是,当我进行内存转储时,我发现 arraylist 仍然保存了我在不同循环迭代中使用过的所有值……如何从内存中擦除所有这些值?而且我想在循环迭代结束之前执行此操作,以使数组列表的大小永远不会增长?

4

3 回答 3

1

如果您对“活动”对象进行内存转储,它将被删除。

删除对象的成本相对较高,因此在 Java 中通常最好只在需要时删除对象(当 JVM 这样做时)才删除对象

于 2012-05-27T11:20:59.610 回答
1

您的意思是释放 ArrayList 占用的部分内存,而不是释放以前存储在 ArrayList 中的对象吗?如果是这样,您可以通过调用ArrayList.trimToSize()- 将 ArrayList 中的所有值复制到一个新的(内部)数组中,并允许对旧的(内部)数组进行垃圾收集。(因为这涉及到复制数组中的所有值,所以自然只有当它会产生很大的不同时才应该这样做。)

于 2012-05-27T11:50:17.337 回答
0

Java 有垃圾收集器是有原因的,这个原因是程序员不必考虑从内存中删除对象。您唯一能做的(我不推荐)就是通过System.gc()方法强制启动垃圾收集器。但记得做两次,因为第一次它只会通过调用 itfinalize()方法来准备要删除的对象。

于 2012-05-27T11:27:39.313 回答