Java ArrayList.clear()方法是否释放内存?

Java ArrayList.clear()方法是否释放内存?,java,android,memory,arraylist,Java,Android,Memory,Arraylist,如果我没有弄错的话,ArrayList包含存储添加到列表中的变量的内存位置的值。因此,我的假设是,当调用ArrayList.clear()方法时,它只释放前面提到的值(内存位置),而不会释放这些内存位置本身。我将尝试用一个例子来说明这一点: 假设您拥有当前的内存状态: [Memory location] (type of variable) *value* [1000] (int) 32 [1002] (int) 12 [1003] (float) 2.5 然后将它们添加到列表myLis

如果我没有弄错的话,ArrayList包含存储添加到列表中的变量的内存位置的值。因此,我的假设是,当调用ArrayList.clear()方法时,它只释放前面提到的值(内存位置),而不会释放这些内存位置本身。我将尝试用一个例子来说明这一点:

假设您拥有当前的内存状态:

[Memory location] (type of variable) *value*

[1000] (int) 32

[1002] (int) 12

[1003] (float) 2.5
然后将它们添加到列表myList中,因此它包含指向100010021003个内存位置的指针


调用myList.clear()时,指针将为空,但内存位置1000、1002、1003仍将包含以前给定的值。我错了吗?

您是正确的,因为内存是由垃圾收集器异步清除的,而不是直接由此类库函数清除的
clear
只会
null
将它们全部清除,并相应地更新
ArrayList
状态


如果这些元素中的任何一个或所有未被代码的任何其他部分引用,则它们将符合垃圾收集的条件,并且可能会在该调用后不久到时间结束的任何时间被销毁和取消分配。

清除仅为空备份数组元素

public void clear() {
    modCount++;
    for (int i = 0; i < size; i++)
        elementData[i] = null;
    size = 0;
}

不,它不会清除内存。在您
清除()
之后

请参阅clear()的源代码

public void More…clear(){
modCount++;
//让gc完成它的工作
对于(int i=0;i

该方法正在使元素符合垃圾收集器的条件。未立即清除它们。一旦GC运行,它们就消失了。

您的问题的答案是,它不会
释放内存。它只会删除所有
对象引用
。现在,垃圾收集器可以收集这些对象,也可以不收集,这取决于它们在其他位置的引用方式

比如说,

Object 1 refers - > Object 2
ArrayList refers - > Object 2
ArrayList refers - > Object 3

在这种情况下,在
Arraylist.clear()
之后,对象3将符合
清理的条件,但不符合对象2的条件。

可以帮助您注意到
Arraylist
从不包含像
int
这样的原语,而是包含像
Integer
这样的对象。这对于答案来说非常重要。谢谢,我将确保手动处理丢弃的变量:)干杯,祝你愉快avatar@NitroNbg,应该不需要手动执行任何操作,只要它们未被引用,它们将被取消分配。谢谢:)在这个问题的背景下,这是在浪费空间,不是吗?因为现在不仅是被清除的元素,而且数组本身也处于GC的边缘
 public void More ...clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
       elementData[i] = null;   
       size = 0;
    }
Object 1 refers - > Object 2
ArrayList refers - > Object 2
ArrayList refers - > Object 3