2010-04-19 71 views
1

我有以下代码快照:Java的内存管理

public void getResults(String expression, String collection){ 
ReferenceList list; 
Vector <ReferenceList> lists = new <ReferenceList> Vector(); 

list = invertedIndex.get(1)//invertedIndex is class member 

lists.add(list); 
} 

当方法完成后,我supose本地对象(列表,列表)“破坏”。你能否告诉我们是否释放了存储在invertedIndex中的列表占用的内存?或者,java分配列表时分配新的内存list = invertedIndex.get(1);

+0

请注意,Vector是一个过时的数据结构,应该再次使用。 – 2010-04-20 10:06:24

回答

1

是,该方法返回后,lists将被标记为垃圾回收。

listinvertedIndex将不会受到影响,除非get操作是破坏性的(即,其从自身去除list并返回它)。

+0

实际上我认为只有列表会被标记为垃圾回收,因为列表不会分配任何内存。我对吗? – pavlos 2010-04-19 17:05:54

+0

是的,好点。只有'list'变量本身使用的内存才会被回收 - 而不是list指向的实际对象所使用的内存。 – 2010-04-19 17:18:04

2

想出listlists作为对象的引用,而不是对象本身,当进行内存管理时。

方法被调用之前,你必须invertedIndex标记某个对象。由于它是从一个Class(保留在内存中)引用的,因此该对象不可用于垃圾回收。

里面的方法创建一个矢量,并使用lists引用它。您还可以使用list将invertedIndex内的对象的一部分命名。

该方法被调用后,两个名称超出范围。创建的矢量没有其他引用,因此它可用于垃圾收集。但是,由list引用的对象仍由invertedIndex间接引用,因此它不可用于垃圾回收。

我希望这会有所帮助。

+0

非常感谢!它确实有帮助。 – pavlos 2010-04-19 17:09:13