0

私はこのテストプログラムを書きました。

import java.io.Console;

public class ConsoleTest{

public static void main(String[] args) {
        // TODO Auto-generated method stub

        Console console = System.console();
        System.out.println("ConsoleTest initialising... \n Enter command : ");
        String line = "";

        if(console!=null){
            while ( (line = console.readLine())!= null ){
                System.gc();
                System.out.println("your input : " + line);

                if("exit".equalsIgnoreCase(line)){
                    System.out.println("Bye ~");                    
                    System.exit(0);
                }else{
                    System.out.println("Enter command : ");
                }

            }
        }else{
            System.out.println("No console found");
        }


    }
}



ここに画像の説明を入力
この質問を書いている間も、プログラムに何もせずに、ヒープメモリの使用量が絶えず増加しているのを見ました。
また、[GC の実行] ボタンをクリックするたびに、Windows タスク マネージャーは、プログラムが少し多くのメモリを使用していることを示します。
コードに何か問題がありますか? それともこれは正常な動作ですか?



編集
後で、メモリヒープ使用量グラフがより長い時間スケールで定期的に変動することがわかりました。
なぜそうなるのかはわかりませんが、それは別の問題だと思います。
もう 1 つ質問すると、Java Monitor のヒープ使用量と Windows タスク マネージャーに表示されるメモリ使用量に大きな違いが見られました。
Java Monitor のヒープ使用量は、Eclipse プロセスで約 300MB を示しました。
Windows タスク マネージャーでは、900MB 程度です。
この違いは、ヒープ使用量にスタック メモリ使用量が含まれていないためですか?

4

2 に答える 2

1

あなたが話しているメモリの量はごくわずかです。JVM は、少量を解放することに煩わされていません。より興味深い動作を見たい場合は、ガベージ コレクションを要求する前に、大きなブロックへの参照を割り当ててから削除します。

于 2013-08-28T01:25:55.970 に答える