1

我写了一个代码,它使用了大量的内存,所以我正在监视它的输出。结果有点有趣,有人能解释一下为什么我的空闲内存会减少而不是增加,尽管我在不断地分配对象,为什么它会以一个值堆叠?

这是我的监控代码:

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






















4

1 回答 1

3

有人可以解释一下为什么我的免费内存减少而不是增加

新对象在伊甸园空间中分配。一旦你用完 Eden 空间,一个小型垃圾收集器就会启动并清除未引用的对象(将所有引用的对象提升到幸存者空间之一)。通常,这会导致可用内存量的跳跃。

于 2012-04-24T21:13:14.363 回答