java不支持ArrayList。clear()方法释放内存?
如果我没有弄错的话,ArrayList包含存储添加到列表中的变量的内存位置的值。所以,我的假设是,当你调用ArrayList时。clear()方法它只释放上述值(内存位置),但不释放这些内存位置本身。我将尝试用一个例子来说明这一点:
假设您拥有当前的内存状态:
[Memory location] (type of variable) *value*
[1000] (int) 32
[1002] (int) 12
[1003] (float) 2.5
然后将它们添加到列表myList中,因此它包含指向100010021003个内存位置的指针
当你打电话给我的时候。clear()指针将为空,但内存位置1000、1002、1003仍将包含以前给定的值。我错了吗
# 1 楼答案
clear
仅空值支持数组元素但是如果我们调用
ArrayList.trimToSize
after clear
,支持数组将收缩# 2 楼答案
您是正确的,因为内存是由垃圾收集器异步清除的,而不是直接由此类库函数清除的
clear
只会null
将它们全部清除,并相应地更新ArrayList
状态如果这些元素中的任何一个或所有元素没有被代码的任何其他部分引用,那么它们就有资格进行垃圾收集,并且可能在调用后不久到时间结束的任何时间被销毁+取消分配
# 3 楼答案
不,它不会清除记忆。在你之后
clear()
请参阅clear()的源代码
该方法使元素符合垃圾收集器的条件。没有立即清理它们。一旦GC运行,它们就消失了
# 4 楼答案
你问题的答案是,它不会占用内存。它只会删除所有
object references
。现在garbage
收集器可以收集这些对象,也可以不收集,这取决于它们在其他位置的引用方式比如说,
在这种情况下,在
Arraylist.clear()
之后,对象3将符合clean-up
的条件,但不符合对象2的条件