我有以下代码快照:
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为列表分配新内存答案 0 :(得分:2)
在进行内存管理时,将list
和lists
视为对象的引用,而不是对象本身。
在调用方法之前,您有invertedIndex
标记某个对象。由于它是从类(保留在内存中)引用的,因此该对象不可用于垃圾回收。
在方法内部,您可以创建一个向量并使用lists
来引用它。您还可以使用list
在invertIndex中命名对象的一部分。
调用该方法后,两个名称超出范围。创建的向量没有其他引用,因此可用于垃圾回收。但是,list
引用的对象仍然由invertedIndex
间接引用,因此它不可用于垃圾回收。
我希望这会有所帮助。
答案 1 :(得分:1)
是的,在方法返回后,lists
将被标记为垃圾回收。
list
和invertedIndex
不会受到影响,除非get
操作具有破坏性(IE,它会从自身中移除list
并将其返回)。