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

Xmsオプションの詳細

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

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

-Xms128m

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オプションのコマンド入力例は下記の通りです。

$ 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

初期ヒープサイズを64MBに、最大ヒープサイズを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

XmsとXmxは同じ?

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

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

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

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

ヒープとは?

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

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

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

ポテパンダの一言メモ

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

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

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

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

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

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

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

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

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

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

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

-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に表示されるデフォルト・アイコンをオーバーライドする

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

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

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

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

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

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

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

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

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

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

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

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