javaコマンド「-Xmx」オプションのデフォルトや確認・設定方法を紹介!
  • facebookページ
  • twitterページ
  • 2021.04.26

    javaコマンド「-Xmx」オプションのデフォルトや確認・設定方法を紹介!

    Xmxオプションとは?

     

    オプション名 オプションの機能詳細
    -Xmx 拡張領域のサイズも含む、Javaヒープの最大サイズ(ヒープ・さいず)を指定するオプションです

    サイズはメガバイト (m) またはギガバイト (g) で指定できます。

    例えば、下記のように指定すると、最大ヒープ・サイズが 256MB に設定されます。

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

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

    この例でいくと、ヒープ・メモリの最大サイズは512MBになります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    XmxとXmsの違い

    XmsとXmxの違いは下記の通りです。

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

    Xmxがヒープ・メモリ全体の最大サイズに対し、Xmsは起動時のサイズになります。

    それぞれ異なるものですので覚えておきましょう。

    そもそもヒープとは?

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

    ポテパンダの一言メモ

    さらに、プログラム実行時に好きなタイミングで領域の確保・解放ができるものを「ヒープ領域」と言います。

    スタック領域とは異なり、使い道や確保・解放のタイミングが決まっていないので、プログラム側が自由に使用可能です。

    OS側から一定のサイズのメモリ領域を、プログラム実行時にヒープ領域のために割り当てられます。

    その中から、プログラム側が任意のタイミングで必要な量を宣言し、データやオブジェクトなどを保存するために、ヒープ領域を確保できるのです。

    また、ヒープ領域が不要になれば、明示的に解放処理を実行できます。

    そうすることで、保存したデータは破棄され、他の用途のために確保できるようになります。

    Xmxのデフォルト設定について

    最大 Java ヒープ・サイズ(Xmx)のデフォルトは、下記の通りです。

    Java ヒープ・サイズ(Xmx)のデフォルトサイズ
    • AIX®:使用可能メモリーの半分のサイズ (最小 16 MB、最大 512 MB)
    • IBM® i:2GB
    • Linux:使用可能メモリーの半分のサイズ (最小 16 MB、最大 512 MB)
    • Windows:使用可能メモリーの半分のサイズ (最小 16 MB、最大 512 MB)
    • z/OS®:使用可能メモリーの半分のサイズ (最小 16 MB、最大 512 MB)

    (引用:JVM のデフォルト設定

    Xmxの物理メモリについて

    javaコマンドのツール・リファレンスによると、Xmxの物理メモリは下記の通りです。

    -Xmx size
    メモリー割当てプールの最大サイズ(バイト単位)を指定します。この値は、1024の倍数で、2Mバイトより大きくなければなりません。キロバイトを指定するには文字kまたはK、メガバイトを指定するには文字mまたはM、ギガバイトを指定するには文字gまたはGを付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。サーバー配備の場合、-Xmsと-Xmxが同一の値に設定されていることがよくあります。次の例では、様々な単位を使用して、割り当てられたメモリーの最大許容サイズを80Mバイトに設定する方法を示します。

    -Xmx83886080
    -Xmx81920k
    -Xmx80m
    -Xmxオプションは-XX:MaxHeapSizeと同等です。

    デフォルトの場合、「-Xmx」の最大値は物理メモリの1/4となっています。

    JavaのXmxサイズを超えることがある?

    結論を言うと、Xmxサイズを超えることはあり得ます

    JVMが利用するメモリには、次の3種類があります。

    1. Javaヒープ
    2. Cヒープ(Nativeヒープ)
    3. スレッドスタック

    一般的に言われているヒープはJavaヒープを指し、「-Xmx」や「-Xms」はJavaヒープサイズの制限を指定しています。

    一方、JVMはJavaヒープ以外にも「Cヒープ」「スレッドスタック」を使用していますので、JVMプロセスのメモリ使用量は実際には3種類の合算値です。

    つまり、Javaヒープ使用量が「-Xmx」で指定した最大サイズになれば、JVMプロセスのメモリ使用量は「-Xmx」で指定した最大サイズを超えることになります。

    その他のjavaコマンドオプション

    ここでは、javaコマンドオプションの確認・設定方法を紹介します。

    標準オプション

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

    コマンドを実行してみると、下記のようにコマンド一覧が表示されます。

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

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

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

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

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

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



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

    この記事をシェア

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









    ABOUT US

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

    READ MORE