我正在创建一个java程序,其中一些数据被添加到arraylist。
一些处理在一个循环中,我在循环中向列表中添加一个新节点,使用该节点执行操作,然后在迭代结束之前使用arraylist.remove()删除该节点循环。我也在运行System.gc();就在循环迭代结束之前。
然而,当我进行内存转储时,我发现arraylist仍然保留了我在不同循环迭代中使用的所有值...如何从内存中擦除所有这些值?我想在迭代循环结束之前做这个,这样arraylist的大小永远不会增长?
答案 0 :(得分:1)
如果您对“实时”对象进行内存转储,则会将其删除。
删除对象的成本相对较高,因此通常最适合Java中的性能,只在需要时(当JVM执行时)删除对象
答案 1 :(得分:1)
你的意思是释放ArrayList占用的部分内存,而不是释放以前存储在ArrayList中的对象吗?如果是这样,您可以通过调用ArrayList.trimToSize()
来执行此操作 - 这会将ArrayList中的所有值复制到新的(内部)数组中,并允许对旧(内部)数组进行垃圾回收。 (因为这涉及复制数组中的所有值,它自然应该只在它会产生很大的差异时才会完成。)
答案 2 :(得分:0)
Java有垃圾收集器是有原因的,原因是程序员不必考虑从内存中删除对象。你唯一可以做的事情(我不建议)是通过System.gc()
方法强制启动垃圾收集器。但请记住这样做两次,因为第一次它只会通过调用finalize()
方法来准备要删除的对象。