java内存管理

时间:2010-04-19 16:50:49

标签: java memory-management

我有以下代码快照:

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);
}

当方法完成时,我认为本地对象(列表,列表)被“销毁”。你能判断一下存储在invertedIndex中的列表占用的内存是否也被释放了?或者在分配list = invertedIndex.get(1);

时,java为列表分配新内存

2 个答案:

答案 0 :(得分:2)

在进行内存管理时,将listlists视为对象的引用,而不是对象本身。

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

在方法内部,您可以创建一个向量并使用lists来引用它。您还可以使用list在invertIndex中命名对象的一部分。

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

我希望这会有所帮助。

答案 1 :(得分:1)

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

listinvertedIndex不会受到影响,除非get操作具有破坏性(IE,它会从自身中移除list并将其返回)。