首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪个对象将被垃圾收集?

哪个对象将被垃圾收集?
EN

Stack Overflow用户
提问于 2010-01-20 06:03:20
回答 3查看 393关注 0票数 1

我想确认哪个场景会导致对象myObj上的垃圾收集:

场景1

代码语言:javascript
运行
复制
ArrayList arList = new ArrayList();
while(someCondition)
{
  myObj = new MyObect(); // a custom object
  arList.add(myObj); 
}

场景2

代码语言:javascript
运行
复制
ArrayList arList = new ArrayList();
while(someCondition)
{
  myObj = new MyObect(); // a custom object
  arList.add(myObj); 
  myObj=null;
}

显式地将对象设置为null是否会改善垃圾收集行为,还是在使用新构造函数重置对象时会是相同的?

EN

Stack Overflow用户

发布于 2010-01-20 06:29:21

我认为这是你误解的根源。

嗯..。但我不希望保留两个myObj副本,一个在arList中,一个在原始变量中。一旦我将myObj添加到arLsit中,如何冲洗它?

你不能“保留两份myObj”。在您的示例中,循环创建的每个MyObject实例只有一个“副本”。顺序如下:

  1. 创建一个MyObject实例,将其引用分配给myObj
  2. 将对实例的引用添加到arList引用的arList
  3. null分配给myObj中的引用。

请注意,将引用添加到列表并不会创建MyObject实例的副本。它仅仅意味着你在两个地方而不是一个地方有引用。当您分配null时,您将再次将引用放在一个位置上。

另外要注意的是,将null分配给某物永远不会导致垃圾收集器运行。它所做的就是(显式地)在下次运行垃圾收集器时从考虑中删除引用的潜在副本。

最后,如果我们假设范围如下,则C行将没有明显的效果.除非A行或B行触发垃圾回收。

代码语言:javascript
运行
复制
{
    MyObject myObj;
    ArrayList arList = new ArrayList();
    while (someCondition) {       // A
         myObj = new MyObect();   // B
         arList.add(myObj); 
         myObj = null;            // C
    }
}
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2099354

复制
相关文章

相似问题

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