我写了一个代码,它使用了大量的内存,所以我正在监视输出。 结果有点有趣,有人可以解释一下,为什么我的空闲内存会降低而不是增加,尽管我会不断地分配对象,为什么它会叠加一个值?
这是我的监控代码:
Thread th = new Thread(new Runnable() {
@Override
public void run() {
while(true){
System.out.println("" + (Runtime.getRuntime().freeMemory()/1024));
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(FaAlgoritmus.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
th.start();
结果:
42454
49666个
109869个
76995个
39779个
125981个
89814个
191056个
137835个
142766个
121279个
50221个
130072个
75460个
143199个
88164个
145557个
75224个
27234个
136953个
87933个
34991个
151526个
99113个
47005个
163787个
56278个
44491个
44491个
44491个
44491个
44491个
44491个
44491个
44491个
44491个
44489个
44489个
44489
答案 0 :(得分:3)
有人可以解释一下我为什么我的免费内存降低而不是增加
新对象在Eden空间中分配。一旦你耗尽了伊甸园空间,一个小的垃圾收集器开始并摆脱未引用的对象(将所有引用的对象提升到一个幸存者空间)。通常情况下,这会导致可用内存量的增加。