代码之家  ›  专栏  ›  技术社区  ›  Zombies

Java:对列表调用clear()会立即释放内存吗?

  •  2
  • Zombies  · 技术社区  · 14 年前

    如果我们有一个链表,在本例中是ArrayList,但是可以为其他列表解释一下:

    ArrayList<String> list = ...10000 elements
    

    或者A)

    list.clear();
    System.gc();
    

    或B)

    list = null;
    System.gc();
    
    4 回复  |  直到 14 年前
        1
  •  6
  •   Bozho    14 年前

    不,它不会立即释放内存。你不能那样做。

    垃圾收集器一运行,内存就会被释放。但你不能强迫它跑。您只需向JVM建议应该运行垃圾收集器,但这绝不是强制的。

        2
  •  2
  •   sblom    14 年前

    这两种方法都可以,在B的情况下释放一个额外的对象(列表本身)。

        3
  •  1
  •   littleprogramer    13 年前

        4
  •  0
  •   Jav_Rock Rahul N    12 年前

    有一个关于Java列表行为和列表选项的常规writeup here :

    虽然我还没有深入研究源代码,但在我看来,JDK 7版本的数组列表是基于可调整大小的数组而不是链接列表的。调用clear时,对象仍保留其缓冲区的一部分。

    如果将对象设置为空,则整个列表都可以进行收集(假设没有其他对象保留对它的引用)。