在Java转储中,保留大小=0意味着什么?

在Java转储中,保留大小=0意味着什么?,java,jvm,dump,visualvm,Java,Jvm,Dump,Visualvm,使用JDK1.8和VisualVM,我看到字符串的保留大小为0。根据,这意味着分配给字符串的内存为0。这是否意味着该字符串已经过GC?如果已经是GC,为什么它仍然显示?如果不是,保留大小=0意味着什么?这是否意味着“如果JVM使用这个字符串,它只能获得0 KB的可用内存” 示例代码为: public class Main { private static final Logger LOGGER = Logger.getLogger(Main.class.getName()); p

使用JDK1.8和VisualVM,我看到字符串的保留大小为0。根据,这意味着分配给字符串的内存为0。这是否意味着该字符串已经过GC?如果已经是GC,为什么它仍然显示?如果不是,保留大小=0意味着什么?这是否意味着“如果JVM使用这个字符串,它只能获得0 KB的可用内存”

示例代码为:

public class Main {
    private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
    private static ExecutorService executorService = Executors.newFixedThreadPool(3);

    public static void main(String[] args) throws InterruptedException {
        AAAAAAAA a = new AAAAAAAA();

        a.setString();
        Thread.sleep(55555555); // I dump it when it's asleep.
    }
}

class AAAAAAAA {
    String string = "wawawawa";

    public void setString() {
        string = "hahahahaha";
    }
}

VisualVM中的“保留大小”指的是对象在下一次完整GC后在堆中占据的大小


在您的例子中,当您访问上述
Thread.sleep()
方法时,“wawawawa”字符串对象可用于垃圾收集(您已将保存它的字符串字段设置为“hahahahaha”),因此在下一次完整GC之后,它将占用0个空间。这就是你在屏幕截图中看到的。

你能提供一个官方文档或链接来证明“VisualVM中的“保留大小”是指对象在下一次完全GC后在堆中占据的大小。”?在谷歌搜索“保留大小visualvm”时,我找不到任何