我有以下代码快照:
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);
}当该方法完成时,我假设本地对象( list,list)被“销毁”。你能判断出invertedIndex中list占用的内存是否也被释放了吗?或者java在分配list = invertedIndex.get( 1)时是否为list分配新的内存;
发布于 2010-04-20 01:05:28
在进行内存管理时,可以将list和lists视为对对象的引用,而不是对象本身。
在调用该方法之前,您让invertedIndex标记了一些对象。因为它是从一个类(保留在内存中)引用的,所以该对象不能用于垃圾收集。
在该方法中,您可以创建一个向量并使用lists来引用它。您还可以使用list在invertedIndex中命名对象的一部分。
在调用该方法之后,这两个名称超出了范围。创建的向量没有其他引用,因此它可用于垃圾收集。但是,invertedIndex仍然间接引用list引用的对象,因此它不能用于垃圾回收。
我希望这能帮到你。
发布于 2010-04-20 00:54:48
是的,在方法返回后,lists将被标记为垃圾回收。
list和invertedIndex不会受到影响,除非get操作是破坏性的(即,它从自身移除list并返回它)。
https://stackoverflow.com/questions/2669248
复制相似问题