有关我的OCA考试垃圾收集的问题

洛斯基尔
class CardBoard {
    Short story = 200;

    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;
// When this line is reached, what is eligible for the GC.
    }
}

有人可以解释一下这里发生了什么吗?我了解,c1并且Short有资格获得垃圾收集器。但是发生了什么c2,为什么还不c3可用呢?我可能会在这里监督一些事情,但是我很乐意为您提供帮助我解决该主题的各种意见。我的OCA考试是下周,但我仍然遇到这类问题。

编辑:对符合GC条件的评论。

应得

可视化所涉及的对象将有所帮助。在main中的第一条语句之后,我们有:

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c1 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+

在main中的第二个语句之后,我们有:

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c1 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c2 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+

(理论上,两个CardBoard也可能共享Short对象,Javadoc ofShort.valueOf表示:

此方法将始终缓存-128至127(包括)范围内的值,并且可能缓存该范围之外的其他值。

但是,JDK实现仅在-128到127范围内进行缓存,因此我们将假定继续进行)

进入go()方法后,我们将:

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c1 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c2 ----> |-----------|  /     |-------|
     --> |  story    | /      |  200  |
    /    +-----------+        +-------+
   / 
  /
cb

在离开go()之前,我们有:

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c1 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c2 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+
    
  
cb --x    

在main的第三个语句之后,我们有:

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c1 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c2 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+
    

c3 --x

在离开main()之前,我们有:

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c1 -x    |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+

         +-----------+        +-------+
         | CardBoard |   ---> | Short |
c2 ----> |-----------|  /     |-------|
         |  story    | /      |  200  |
         +-----------+        +-------+
    

c3 -x    

我们可以看到,在分配的4个对象中,有2个仍可访问,有2个有资格进行收集。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有关我的rsync脚本的问题

有关我的终端机中出现的问题

我需要从GitHub收集有关我们项目的评论统计信息

有关我的乒乓代码的建议

获取有关我的PSU的信息

有关我的应用程序的依赖关系和对等依赖关系的问题

有关我的数据库MySQL和Android Studio的问题

有关我计算机中用户的快速问题

与垃圾收集器和finalize()方法有关的问题

如何解决SonarQube有关我的代码的投诉?

包括有关我的动态操作的警报消息

需要有关我缺少的代码输出的说明

我的大学可以在大学网络上收集有关我的互联网使用情况的哪些信息?

我的浏览器是否发送有关我的Linux发行版的任何信息?

Jetbrains dotPeek是否向我发出有关我的代码的警告?

我如何收到有关我的服务正在被卸载的通知?

LinkedIn API-获取有关我的所有连接的信息

如何从SQL Server创建有关我的表的列表?

需要有关我的方法的建议:读取正在连续写入的文件吗?

如何在Android中发送有关我的位置地址的短信

如何获得有关我的recoll索引的统计信息?

npm install会产生有关我似乎无法纠正的监视同伴的警告

PHP/HTML - 如何获取有关我的 Discord 服务器的统计信息?

请求有关我的表单为何无法正确验证的帮助

我有带有searchview的recyclerview如何发送有关我搜索到的商品的详细数据

为什么我没有有关我的AWS IAM身份的详细信息?未知输出类型:JSON

在没有连接以太网电缆时看到有关我的有线连接的混乱通知

垃圾收集和毕加索的问题

关于Java垃圾收集的问题