深入理解java虚拟机第二版 代码清单3-1对于引用算法的验证没有输出结果,与书上说明不符,为什么?

发布于 2022-09-07 11:39:24 字数 837 浏览 17 评论 0

代码如下:

package referenceCoutingGC;

/**
 * 
 * testGC()方法执行后,ogjA和ogjB会不会被GC呢?
 *
 */
public class referenceCoutingGC {
    
    public Object instance = null;
    
    private static final int _1MB = 1024*1024;
    
    private byte[] bigSize = new byte[2*_1MB];
    
    public static void testGC(){
        referenceCoutingGC objA = new referenceCoutingGC();
        referenceCoutingGC objB = new referenceCoutingGC();
        objA.instance = objB;
        objB.instance = objA;
        
        objA = null;
        objB = null;
        
        //假设在这行放生GC,objA和objB是否能被回收?
        System.gc();
        System.out.println("??");
    }
    public static void main(String[] args){
        
        testGC();
        
    }
}

书上是有输出结果的。 还特地说明4603k->210k的字眼。

我的是jdk 1.8

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无法回应 2022-09-14 11:39:24

他那个输出是因为运行java时添加了运行参数, 应该是-XX:+PrintGCDetails.
个人理解, 这一节只是一个简介, 而这个例子只是想告诉你那两个对象会被回收, 你可以暂时忽略这些日志, 有兴趣可以在读完这章以后再回头看这些示例.
说的直白点, 即使你能让程序输出这些GC日志, 也不一定看得懂. 所以, 继续往下读吧.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文