javaコマンドの「-Xms」について解説|メモリ・確認方法などまとめ
  • facebookページ
  • twitterページ
  • 2021.04.26

    javaコマンドの「-Xms」について解説|メモリ・確認方法などまとめ

    Xmsオプションの詳細

    オプション名 オプションの機能詳細
    -Xms Javaのメモリ割り当てプール(ヒープ・サイズ)の初期値を指定するオプションです
    指定する値が1MB未満の場合、もしくは-XX:NewSizeオプションの値(デフォルト値を含む)以下の場合は初期化エラーが発生し、Javaプロセスが終了します

    例えば、メモリ割り当てプールの初期値を「128MB」として設定する場合、下記のように指定します。

    Xmsのメモリについて

    ここでは、Xmsのメモリについて仕組みを解説します。

    以下は、 JVM のヒープ・メモリ構造を示した画像です。

    (引用元:Javaのヒープ・メモリ管理の仕組み

    ヒープ・メモリ内には、新しいオブジェクトを格納できるNEW領域と、古いオブジェクトを格納できるOLD領域があります。

    作成されてすぐに必要のなくなるオブジェクトは、NEW領域に保管。

    一方、長期間にわたって保持されるオブジェクトは、OLD領域に保管されます。

    JVMのデフォルト設定の場合、NEW領域の起動時のサイズは2MB、最大サイズは16MBに設定されているのが特徴です。

    また、OLD領域の起動時のサイズは4MB、最大サイズは48MBとなっています。

    NEW領域とOLD領域のサイズは、JVMオプションを使用することで変更可能です。

    そのうちのひとつが、Xmsオプションになります。

    オプション名 オプションの機能詳細
    -Xms ヒープ・メモリ全体の起動時のサイズを変更
    -Xmx ヒープ・メモリ全体の最大サイズを変更
    -Xmn NEW領域のサイズを変更
    -XX:SurvivorRatio= Eden領域のサイズをFromまたはTo領域のサイズで割った値(FromとTo領域は同じサイズ)

    Xmsオプションの確認・設定方法

    Xmsオプションのコマンド入力例は下記の通りです。

    この例でいくと、ヒープ・メモリ全体の起動時のサイズは512MBになります。

    Javaプログラムでメモリ情報を確認

    Javaプログラムでメモリ情報を確認するサンプルコードと実行方法です。

    初期ヒープサイズを64MBに、最大ヒープサイズを256MBに指定した場合の実行結果です。

    最大メモリが268MB程度、合計メモリが69MB程度になっているのがわかります。

    こちらは初期ヒープサイズも最大ヒープサイズを256MBに指定した場合の実行結果です。

    どちらも最大メモリが268MB程度になりました。

    最後に、物理メモリサイズを256MBで指定した場合の実行結果です。

    最大メモリが132MB、合計メモリが10MB程度になっていますね。

    Eclipseでヒープ・ステータスを確認

    Eclipseでヒープ・ステータス(メモリ量(Xms)・最大メモリ量(Xmx))を表示する手順は下記の通りです。

    ①Eclipseを起動し、設定アイコンをクリック

    Eclipseでヒープ・ステータスを確認1

    ②設定画面の「一般」から「ヒープ・ステータスを表示」にチェックを入れ、「適用して閉じる」をクリック

    Eclipseでヒープ・ステータスを確認2

    ③Eclipseの画面下部にヒープ・ステータスが表示されます

    Eclipseでヒープ・ステータスを確認3

    XmsとXmxは同じ?

    XmsとXmxは異なるコマンドオプションです。

    • -Xms:ヒープ・メモリ全体の起動時のサイズを変更します
    • -Xmx:ヒープ・メモリ全体の最大サイズを変更します

    XmsとXmxのデフォルトサイズは?

    JVMのデフォルト設定の場合、NEW領域の起動時のサイズ(Xms)は2MB、最大サイズ(Xmx)は16MB

    OLD領域の起動時のサイズ(Xms)は4MB、最大サイズは48MB(Xmx)です。

    ヒープとは?

    ここでは少し、ヒープについて説明します。

    ヒープとは、コンピュータプログラムが利用するメモリ領域の種類のひとつです。

    プログラム実行時に、任意のタイミングで領域の確保・解放が可能なものをヒープ領域と言います。

    ポテパンダの一言メモ

    そもそも、ヒープは「山積み」という言葉の「山」を意味する英単語です。

    プログラム実行時に、OS側からある一定のサイズのメモリ領域が、ヒープ領域用として割り当てられます。

    その内、プログラム側が任意のタイミングで必要量を明示的に宣言し、データ・オブジェクトなどを保存するために領域を確保可能です。

    スタック領域とは違い、使用用途や確保・解放のタイミングが定められていないため、プログラム側の都合で自由に使えます

    ヒープ領域が不要になれば、明示的に解放処理を実行することで保存したデータは破棄され、再度他の用途のために確保できるようになるのです。

    javaコマンドオプションの確認・設定方法

    ここでは、javaコマンドオプションの確認・設定方法を見ていきましょう。

    標準オプション(-classpath、-version)

    javaコマンドの中でも標準オプションは、下記コマンドで一覧を確認可能です。

    実際に実行してみると、下記のように表示されます。

    かなり多くのコマンドがあるので、必要なコマンドを探すのは少し苦労します。

    標準オプションでよく使うものには「version」があります。

    実行すると、下記のようにJavaのバージョンが表示されます。

    非標準オプション(-Xmx、-Xms)

    javaコマンドの中でも非標準オプションは、下記コマンドで一覧を確認可能です。

    今回紹介した「Xms」もこちらの非標準オプションのひとつですね。

    実際に実行してみると、下記のように表示されます。

    Mac OS X固有のオプションもあります。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE