sublist(from,to).clear()是否允许对ArrayList的已清除部分进行垃圾收集?

时间:2011-09-07 08:54:20

标签: java garbage-collection arraylist

在Java中,当有一些非空的ArrayList时,

list.sublist(from,to).clear()

编辑(重构的问题):

减少ArrayList的内部大小(即让ArrayList之后使用更少的内存)?

我对from = 0的情况特别感兴趣,即从开头清除列表直到某个项目。如果from是列表中的任何索引(不仅是第一个),trimToSize()也可以工作吗?

4 个答案:

答案 0 :(得分:4)

“clear”是在底层本机数组(Object [])中重定位对象,但它不会调整数组的大小。如果要在删除ArrayList中的某些项后减小数组大小,请使用trimToSize()方法。

数组的未使用元素引用设置为null,因此可以对元素进行垃圾回收。

答案 1 :(得分:2)

当您清除子列表时,它与删除这些条目相同,因此所有这些条目都可以被GCed(少在其他地方引用它们)

托管内存对象的重点在于您无需担心清理它们的方式和时间。除非你知道你有问题,否则我不担心。在这种情况下,我会使用内存分析器来确定在您认为不应该保留对象的原因时。

答案 2 :(得分:1)

  

sublist(from,to).clear()是否允许对ArrayList的已清除部分进行垃圾收集?

是的,如果您获得子列表并清除它,您将从原始列表中删除子列表中的所有元素

换句话说,如果列表是唯一存储对象引用的列表,您删除的对象有资格进行垃圾回收。

基本演示:

List<String> strings = new ArrayList<String>();
strings.add("one");
strings.add("two");
strings.add("three");
strings.add("four");

System.out.println(strings);   // prints [one, two, three, four]

strings.subList(1, 3).clear();

System.out.println(strings);   // prints [one, four]

答案 3 :(得分:0)

未使用?返回的列表是原始的VIEW。如果您修改一个,则可能会在另一个上看到更改。