Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Xmxオプションとは?

 

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

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

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

-Xmx256m

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

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

$ java -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8 -Xms512m -Xmx512m

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

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

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

■記述例
public class MemoryCheck {
  public static void main(String[] args) {
    Runtime rt = Runtime.getRuntime();
    System.out.println("バージョン   : " + rt.version());
    System.out.println("最大メモリ   : " + rt.maxMemory());
    System.out.println("合計メモリ   : " + rt.totalMemory());
  }
}
■実行結果
mbp:desktop potepan$ java -Xms64m -Xmx256m MemoryCheck
バージョン   : 12.0.2+10
最大メモリ   : 268435456
合計メモリ   : 69206016

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

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

■実行結果
mbp:desktop potepan$ java -Xms256m -Xmx256m MemoryCheck
バージョン   : 12.0.2+10
最大メモリ   : 268435456
合計メモリ   : 268435456

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

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

■実行結果
mbp:desktop potepan$ java -XX:MaxRAM=256m MemoryCheck
バージョン   : 12.0.2+10
最大メモリ   : 132120576
合計メモリ   : 10485760

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

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

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

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

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

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

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

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

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

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

XmxとXmsの違い

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

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コマンドの中でも標準オプションは、下記コマンドで一覧を確認可能です。

$ java -help

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

使用方法: java [options] [args...]
(クラスを実行する場合)
または java [options] -jar [args...]
(jarファイルを実行する場合)
または java [options] -m [/] [args...]
java [options] --module [/] [args...]
(モジュールのメイン・クラスを実行する場合)
または java [options] [args]
(単一のソースファイル・プログラムを実行する場合)

メイン・クラス、ソース・ファイル、-jar 、
-mまたは--module /に続く引数は、メイン・クラスへの引数として
渡されます。

オプションは次のとおりです:

-cp <ディレクトリおよびzip/jarファイルのクラス検索パス>
-classpath <ディレクトリおよびzip/jarファイルのクラス検索パス>
--class-path <ディレクトリおよびzip/jarファイルのクラス検索パス>
:区切りリスト(ディレクトリ、JARアーカイブ、
ZIPアーカイブ)で、クラス・ファイルの検索用。
-p
--module-path ...
ディレクトリの:区切りリスト、各ディレクトリ
はモジュールのディレクトリです。
--upgrade-module-path ...
ディレクトリの:区切りリスト、各ディレクトリ
は、ランタイム・イメージ内のアップグレード可能な
モジュールを置換するモジュールのディレクトリです
--add-modules [,...]
初期モジュールに加えて解決するルート・モジュール。
には次も指定できます: ALL-DEFAULT、ALL-SYSTEM、
ALL-MODULE-PATH.
--list-modules
参照可能なモジュールをリストし終了します
-d
--describe-module
モジュールを説明し終了します
--dry-run VMを作成しメイン・クラスをロードしますが、メイン・メソッドは実行しません。
--dry-runオプションは、次の検証に役立つ場合があります:
モジュール・システム構成などのコマンド行オプション。
--validate-modules
すべてのモジュールを検証し終了します
--validate-modulesオプションは、次の検索に役立つ場合があります:
モジュール・パス上のモジュールでの競合およびその他のエラー。
-D=
システム・プロパティを設定します
-verbose:[class|module|gc|jni]
詳細出力を有効にします
-version 製品バージョンをエラー・ストリームに出力して終了します
--version 製品バージョンを出力ストリームに出力して終了します
-showversion 製品バージョンをエラー・ストリームに出力して続行します
--show-version
製品バージョンを出力ストリームに出力して続行します
--show-module-resolution
起動時にモジュール解決出力を表示します
-? -h -help
このヘルプ・メッセージをエラー・ストリームに出力します
--help このヘルプ・メッセージを出力ストリームに出力します
-X 追加オプションのヘルプをエラー・ストリームに出力します
--help-extra 追加オプションのヘルプを出力ストリームに出力します
-ea[:...|:]
-enableassertions[:...|:]
指定した粒度でアサーションを有効にします
-da[:...|:]
-disableassertions[:...|:]
指定した粒度でアサーションを無効にします
-esa | -enablesystemassertions
システム・アサーションを有効にします
-dsa | -disablesystemassertions
システム・アサーションを無効にします
-agentlib:[=]
ネイティブ・エージェント・ライブラリをロードします。例: -agentlib:jdwp
-agentlib:jdwp=helpも参照してください
-agentpath:[=]
フルパス名を使用して、ネイティブ・エージェント・ライブラリをロードします
-javaagent:[=]
Javaプログラミング言語エージェントをロードします。java.lang.instrumentを参照してください
-splash:
指定されたイメージを含むスプラッシュ画面を表示します
HiDPIスケールのイメージが自動的にサポートされて使用されます
(可能な場合)。スケーリングされないイメージのファイル名(image.extなど)を
引数として-splashオプションに必ず渡す必要があります。
指定された最も適切なスケーリング済イメージが選択されます
(自動的)。
詳細は、SplashScreen APIのドキュメントを参照してください
@argumentファイル
オプションを含む1つ以上の引数ファイル
-disable-@files
さらなる引数ファイル拡張を無効にします
--enable-preview
クラスをこのリリースのプレビュー機能に依存させることができます
長いオプションの引数を指定する場合、--=または
-- を使用できます。

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

$ java -version

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

mbp:desktop potepan$ java -version
java version "12.0.2" 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

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

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

$ java -X

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

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

-Xbatch バックグラウンドのコンパイルを無効にする
-Xbootclasspath/a:<:で区切られたディレクトリおよびzip/jarファイル>
ブートストラップ・クラス・パスの最後に追加する
-Xcheck:jni JNI関数に対する追加のチェックを実行する
-Xcomp 初回呼出し時にメソッドのコンパイルを強制する
-Xdebug 下位互換性のために提供
-Xdiag 追加の診断メッセージを表示する
-Xfuture 将来のデフォルトを見越して、最も厳密なチェックを有効にする
-Xint インタプリタ・モードの実行のみ
-Xinternalversion
-versionオプションより詳細なJVMバージョン情報を
表示する
-Xloggc: タイムスタンプが付いたファイルにGCステータスのログを記録する
-Xmixed 混合モードの実行(デフォルト)
-Xmn 若い世代(ナーサリ)のヒープの初期および最大サイズ(バイト単位)
を設定する
-Xms Javaの初期ヒープ・サイズを設定する
-Xmx Javaの最大ヒープ・サイズを設定する
-Xnoclassgc クラスのガベージ・コレクションを無効にする
-Xrs Java/VMによるOSシグナルの使用を削減する(ドキュメントを参照)
-Xshare:auto 可能であれば共有クラスのデータを使用する(デフォルト)
-Xshare:off 共有クラスのデータを使用しようとしない
-Xshare:on 共有クラス・データの使用を必須にし、できなければ失敗する。
-XshowSettings すべての設定を表示して続行する
-XshowSettings:all
すべての設定を表示して続行する
-XshowSettings:locale
すべてのロケール関連の設定を表示して続行する
-XshowSettings:properties
すべてのプロパティ設定を表示して続行する
-XshowSettings:vm
すべてのVM関連の設定を表示して続行する
-XshowSettings:system
(Linuxのみ) ホスト・システムまたはコンテナの
構成を表示して続行する
-Xss Javaのスレッド・スタック・サイズを設定する
-Xverify バイトコード検証機能のモードを設定する
--add-reads =(,)*
モジュール宣言に関係なく、を更新して
を読み取る。
をALL-UNNAMEDに設定すると、すべての名前のないモジュールを
読み取れます。
--add-exports /=(,)*
モジュール宣言に関係なく、を更新してをに
エクスポートする。
をALL-UNNAMEDに設定すると、すべての名前のないモジュールに
エクスポートできます。
--add-opens /=(,)*
モジュール宣言に関係なく、を更新して
をに開く。
--illegal-access=
名前のないモジュール内のコードによる、名前のあるモジュール内の
タイプのメンバーへのアクセスを許可または拒否する。
は"deny"、"permit"、"warn"、"debug"のいずれかです
このオプションは将来のリリースで削除されます。
--limit-modules [,...]
参照可能なモジュールの領域を制限する
--patch-module =(:)*
JARファイルまたはディレクトリのクラスおよびリソースで
モジュールをオーバーライドまたは拡張する。
--disable-@files さらなるファイル拡張を無効にする
--source
ソースファイル・モードでソースのバージョンを設定する。

これらは追加オプションであり予告なしに変更されることがあります。

次のオプションはMac OS X固有です:
-XstartOnFirstThread
main()メソッドを最初(AppKit)のスレッドで実行する
-Xdock:name=
Dockに表示されるデフォルト・アプリケーション名をオーバーライドする
-Xdock:icon= Dockに表示されるデフォルト・アイコンをオーバーライドする

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。