在Java转储中,保留大小=0意味着什么?
使用JDK1.8和VisualVM,我看到字符串的保留大小为0。根据,这意味着分配给字符串的内存为0。这是否意味着该字符串已经过GC?如果已经是GC,为什么它仍然显示?如果不是,保留大小=0意味着什么?这是否意味着“如果JVM使用这个字符串,它只能获得0 KB的可用内存” 示例代码为:在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
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”时,我找不到任何