对象的垃圾收集作为参数传递并在方法中设置为null

安杰

我一直试图理解这个问题,但无法解决书中提供的答案。有人可以向我解释吗?问题在下面。

class CardBoard {
  Short story = 5;

  CardBoard go(CardBoard cb) {
    cb = null;
    return cb;
  }

  public static void main(String[] args) {
    CardBoard c1 = new CardBoard();
    CardBoard c2 = new CardBoard();
    CardBoard c3 = c1.go(c2);
    c1 = null;
    // do stuff
  }
}

当达到//做东西时,有多少对象可以进行垃圾回收?

给定的答案是2个对象。仅一个CardBoard对象(c1)是合格的,但它具有一个关联的Short wrapper对象,该对象也合格

我不明白为什么仅对象c1有资格进行垃圾回收。

创建两个对象,c1和c2。

对于对象c3,我们将c2传递给c1.go()方法。并将其设置为null并将返回的对象分配给c3。

在方法c1.go()中,将cb引用的对象设置为null(根据我的理解,该对象与c2引用的对象相同)。难道使c2引用的对象也可用于垃圾回收吗?

失落的心灵

Java是按值传递的当您执行操作时CardBoard c3 = c1.go(c2);,将指向所指向的实例c2go()但是在您执行操作的那一刻cb=null,原始对象c2's cb未设置为null则将新的空引用aconst_null推入堆栈并返回。因此,只有2个对象(Shortc1)可以使用GC。

PS:正如Andreas所说,Short将为-128到127之间的值缓存值,因此在您的情况下,Short将重复使用同一实例。因此,只有一个对象才有资格使用GC。如果您的Short值超出该范围,则2个对象将有资格使用GC。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

设置变量并在ng-repeat中作为参数传递

来自分类Dev

对象的传递方法作为参数

来自分类Dev

为NodeJS中的垃圾收集“标记”一个对象

来自分类Dev

free()在C代码中收集垃圾值,即使释放后将指针设置为NULL,代码也无法正常工作

来自分类Dev

作为参数传递时,值为null

来自分类Dev

将类作为方法中的参数传递,并在If语句中使用此参数

来自分类Dev

将方法的收集结果作为params参数传递

来自分类Dev

从ByteBuddy生成的方法中,如何在作为参数接收的对象中将(公共)实例字段设置为MethodCall的返回值?

来自分类Dev

作为参数传递的对象的 JavaScript 调用方法

来自分类Dev

Javascript:将参数设置为作为参数传递的函数

来自分类Dev

在作为参考传递的参数中创建对象

来自分类Dev

当传递null作为参数传递给重载可变参数方法(对象... O)和非可变参数方法(对象o),为什么VARARGS执行方法?

来自分类Dev

Java中符合垃圾收集条件的对象

来自分类Dev

垃圾收集环境中对象的生存时间

来自分类Dev

垃圾收集函数中的对象数组

来自分类Dev

StringBuilder 中 append 的参数是一个新的 String 对象,它会被垃圾收集吗?

来自分类Dev

如何在Javascript(Node.js)中为垃圾收集标记“新”对象

来自分类Dev

如何在Javascript(Node.js)中为垃圾收集标记“新”对象

来自分类Dev

如何将选项对象作为参数传递给在jQuery()的第二个参数处设置的方法?

来自分类Dev

为元素对象的添加方法设置参数?

来自分类Dev

如何将位置参数传递给设置为字典中的值的函数对象?

来自分类Dev

将 NULL 和空白作为 SQL 参数中的参数传递

来自分类Dev

垃圾收集对象的数量

来自分类Dev

垃圾收集链接的对象

来自分类常见问题

调用作为参数传递给Frida中的钩子函数的Java对象的方法

来自分类Dev

将对象作为参数传递给车把模板中的onclick方法

来自分类Dev

VBA-是否可以将对象的属性作为方法中的参数传递?

来自分类Dev

如何将JSON对象从ActionMethod作为参数传递给MVC中的其他Action方法?

来自分类Dev

取消导出作为远程方法调用中的参数传递的远程对象

Related 相关文章

  1. 1

    设置变量并在ng-repeat中作为参数传递

  2. 2

    对象的传递方法作为参数

  3. 3

    为NodeJS中的垃圾收集“标记”一个对象

  4. 4

    free()在C代码中收集垃圾值,即使释放后将指针设置为NULL,代码也无法正常工作

  5. 5

    作为参数传递时,值为null

  6. 6

    将类作为方法中的参数传递,并在If语句中使用此参数

  7. 7

    将方法的收集结果作为params参数传递

  8. 8

    从ByteBuddy生成的方法中,如何在作为参数接收的对象中将(公共)实例字段设置为MethodCall的返回值?

  9. 9

    作为参数传递的对象的 JavaScript 调用方法

  10. 10

    Javascript:将参数设置为作为参数传递的函数

  11. 11

    在作为参考传递的参数中创建对象

  12. 12

    当传递null作为参数传递给重载可变参数方法(对象... O)和非可变参数方法(对象o),为什么VARARGS执行方法?

  13. 13

    Java中符合垃圾收集条件的对象

  14. 14

    垃圾收集环境中对象的生存时间

  15. 15

    垃圾收集函数中的对象数组

  16. 16

    StringBuilder 中 append 的参数是一个新的 String 对象,它会被垃圾收集吗?

  17. 17

    如何在Javascript(Node.js)中为垃圾收集标记“新”对象

  18. 18

    如何在Javascript(Node.js)中为垃圾收集标记“新”对象

  19. 19

    如何将选项对象作为参数传递给在jQuery()的第二个参数处设置的方法?

  20. 20

    为元素对象的添加方法设置参数?

  21. 21

    如何将位置参数传递给设置为字典中的值的函数对象?

  22. 22

    将 NULL 和空白作为 SQL 参数中的参数传递

  23. 23

    垃圾收集对象的数量

  24. 24

    垃圾收集链接的对象

  25. 25

    调用作为参数传递给Frida中的钩子函数的Java对象的方法

  26. 26

    将对象作为参数传递给车把模板中的onclick方法

  27. 27

    VBA-是否可以将对象的属性作为方法中的参数传递?

  28. 28

    如何将JSON对象从ActionMethod作为参数传递给MVC中的其他Action方法?

  29. 29

    取消导出作为远程方法调用中的参数传递的远程对象

热门标签

归档