有趣的记忆价值

时间:2012-04-24 21:10:42

标签: java memory heap

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

这是我的监控代码:

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

1 个答案:

答案 0 :(得分:3)

  

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

新对象在Eden空间中分配。一旦你耗尽了伊甸园空间,一个小的垃圾收集器开始并摆脱未引用的对象(将所有引用的对象提升到一个幸存者空间)。通常情况下,这会导致可用内存量的增加。