【发布时间】:2016-02-23 02:05:19
【问题描述】:
我正在研究 ArrayList.clear() 并发现它没有释放内存,而是使该列表为空。 当你可以手动告诉编译器不再需要这个特定的 ArrayList 时,你为什么要等待 GC 来释放内存(它可以在 clear 方法本身中完成)。!!
你为什么要不必要地给 GC 额外的头痛。
我知道 System.gc() 会影响应用程序的性能,因为它会为整个应用程序运行垃圾收集。
如果我的服务器内存有限且列表大小太大,有什么办法可以收集这个特定的 ArrayList 垃圾而不是等待 GC 来救援。
编辑:- 出现这个问题是因为我已经初始化了一个 ArrayList(500000) 并且假设我的对象大小大约是 1000 字节,因为一些预初始化的变量但是由于形成第一个对象本身的一些异常,我需要从该函数返回并释放该内存我已分配给该 ArrayList。我希望我的应用程序消耗尽可能低的内存。 GC是我最后的选择。
【问题讨论】:
-
Java中的内存由系统为您管理...如果内存不足,它将首先尝试通过垃圾回收来回收所有内存。通过取消引用对象(使其成为null),您告诉gc可以回收取消引用的对象使用的内存。 -
是java内存模型。所有内存都由垃圾收集器释放。还;如果数组列表中的项目在其他地方使用,你希望它们被释放吗?数组本身也可以在其他地方使用(尽管您可能必须使用反射来获取它)
-
垃圾收集器是Java中释放内存的唯一方法。但坦率地说,它是如此之快,你不应该在意。
标签: java optimization arraylist memory-leaks garbage-collection