4

次のドキュメントhttp://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc.ergonomics.default_sizeによると、並列 GC のデフォルトの最大ヒープ サイズは、式 MIN(メモリ/4、1GB)。式から明らかですが、ドキュメントには、「マシンにインストールされているメモリの量に関係なく、デフォルトの最大ヒープ サイズは 1GB を超えない」と記載されています。次のプログラムを書いたことを確認するには

    パブリッククラス割り当て{

        public static void main(String[] args) throws Exception {
            long メガバイト = Long.valueOf(args[0]);
            ロングバイト = メガバイト * 1024 * 1024;
            int longs = (int) (バイト/8);
            long[] arr = new long[longs];
            Thread.sleep(Long.MAX_VALUE);
            System.out.println(arr.length);
        }
    }

このプログラムは、16Gb の RAM を搭載したボックスで実行しました。

    smeldris@us4nrsdn01 割り当て]$ /usr/java/jdk1.6.0_26/bin/java 割り当て 2048 &
    [1] 9291
    [smeldris@us4nrsdn01 割り当て]$ /usr/java/jdk1.6.0_26/bin/jmap -heap 9291
    プロセス ID 9291 にアタッチしています。お待ちください...
    デバッガーが正常に接続されました。
    サーバー コンパイラが検出されました。
    JVM のバージョンは 20.1-b02 です

    スレッド ローカル オブジェクト割り当てを使用します。
    8 スレッドの並列 GC

    ヒープ構成:
       MinHeapFreeRatio = 40
       MaxHeapFreeRatio = 70
       MaxHeapSize = 4208984064 (4014.0MB)
       NewSize = 1310720 (1.25MB)
       MaxNewSize = 17592186044415 MB
       旧サイズ = 5439488 (5.1875MB)
       新しい比率 = 2
       生存率 = 8
       PermSize = 21757952 (20.75MB)
       MaxPermSize = 85983232 (82.0MB)

    ヒープ使用量:
    PSヤングジェネレーション
    エデン スペース:
       容量 = 65798144 (62.75MB)
       使用済み = 1315976 (1.2550125122070312MB)
       無料 = 64482168 (61.49498748779297MB)
       2.0000199397721614% 使用済み
    宇宙から:
       容量 = 10944512 (10.4375MB)
       使用済み = 0 (0.0MB)
       無料 = 10944512 (10.4375MB)
       0.0%使用
    スペースへ:
       容量 = 10944512 (10.4375MB)
       使用済み = 0 (0.0MB)
       無料 = 10944512 (10.4375MB)
       0.0%使用
    PSオールドジェネレーション
       容量 = 2322923520 (2215.3125MB)
       使用済み = 2147483664 (2048.000015258789MB)
       無料 = 175439856 (167.31248474121094MB)
       92.44745449045176% 使用済み
    PSパーマジェネレーション
       容量 = 21757952 (20.75MB)
       使用済み = 2606752 (2.485992431640625MB)
       無料 = 19151200 (18.264007568359375MB)
       11.980686417545181% 使用済み
    [smeldris@us4nrsdn01 割り当て]$

古い世代では 2GB の配列が割り当てられていました。MaxHeapSize は 4GB で、システム メモリの 1/4 です。JVM がヒープ用に 4GB を予約したのはなぜですか?

4

1 に答える 1

3

この質問を投稿して、jdkメーリングリストをここhttp://mail.openjdk.java.net/pipermail/hotspot-gc-use/2011-August/000912.htmlで開きます。

GCの人間工学は(1.6.0_18)で変更されましたが、ドキュメントはまだ更新されていません。

対応するバグIDhttp ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6887571。リリースノートhttp://www.oracle.com/technetwork/java/javase/6u18-142093.html

于 2011-08-30T13:32:13.383 に答える