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

誰かが私に説明できますか?なぜ私の無料のmemは低くなり、増加するのですか?

新しいオブジェクトはエデンスペースに割り当てられます。Edenスペースが不足すると、マイナーなガベージコレクターが起動し、参照されていないオブジェクトを削除します(参照されているすべてのオブジェクトをサバイバースペースの1つに昇格させます)。通常、これにより空きメモリの量が急増します。

于 2012-04-24T21:13:14.363 に答える