首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java内存管理

java内存管理
EN

Stack Overflow用户
提问于 2010-04-20 00:50:49
回答 2查看 256关注 0票数 1

我有以下代码快照:

代码语言:javascript
复制
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分配新的内存;

EN

回答 2

Stack Overflow用户

发布于 2010-04-20 01:05:28

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

在调用该方法之前,您让invertedIndex标记了一些对象。因为它是从一个类(保留在内存中)引用的,所以该对象不能用于垃圾收集。

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

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

我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2010-04-20 00:54:48

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2669248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档