2012-05-27 35 views
0

我正在创建一个java程序,其中一些数据被添加到数组列表中。如何立即从内存中删除刚刚从数组列表中删除的值

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

但是,当我使用内存转储时,我发现arraylist仍然保存着我在不同循环迭代中使用的所有值......如何从内存中清除所有这些值?我想在循环迭代结束之前这样做,以便数组列表的大小永远不会增长?

+3

为什么你关心?使用像Java这样的内存管理语言应该隐藏你的这些细节。 –

+0

我正在使用的程序将被用于提取数百万条记录,并且在内存耗尽的速度下,我无法在程序的一次(甚至几次)运行中获取所有数据,没有使用我的机器的整个内存... – Arvind

+0

为什么你不使用数组,如果你想要一个固定的大小? – Robert

回答

0

的Java有是有原因的垃圾收集器,以及原因是程序员不必考虑从内存中删除对象。只有你可以做的事情(我不推荐它)是通过System.gc()方法强制启动垃圾收集器。但请记住这样做两次,因为它第一次只会通过调用finalize()方法来准备要删除的对象。

1

如果你把一个“活”对象的内存转储,它将被删除。

删除对象的成本是比较高的,所以它通常最好在Java中,只有当你需要删除对象的性能(当JVM做它)

+0

有没有办法从内存中删除对象,在一个java命令的帮助下?这就是我正在寻找的... – Arvind

+0

我认为你可以调用垃圾回收器/ –

+1

你必须问自己为什么你想要。问题是,99.9%的时间你不在乎。这就是您使用托管内存的原因。顺便说一句:我使用的大部分内存都没有管理,但它非常少见,你需要这样做。 –

1

你的意思是释放由ArrayList占用的部分内存,而不是释放以前存储在ArrayList中的对象?如果是这样,你可以通过调用ArrayList.trimToSize()来完成 - 它会将ArrayList中的所有值复制到一个新的(内部)数组中,并允许旧的(内部)数组被垃圾收集。 (因为这涉及复制阵列中的所有值,所以当然只有当它会产生很大差异时才能完成。)