モジュール java.base
パッケージ java.lang

クラスRuntime

java.lang.Object
java.lang.Runtime

public class Runtime extends Object
JavaアプリケーションはすべてRuntimeクラスの単一のインスタンスを持ちます。このクラスは、アプリケーションとアプリケーション実行環境とのインタフェースになります。 現在のRuntimeオブジェクトは、getRuntimeメソッドにより取得できます。

アプリケーションは、このクラスの独自のインスタンスを生成することはできません。

導入されたバージョン:
1.0
関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    static final class 
    Java SE Platformの実装用のバージョン文字列の表現。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    新しい仮想マシンのシャットダウン・フックを登録します。
    int
    Java仮想マシンが使用できるプロセッサの数を返します。
    exec(String command)
    指定された文字列コマンドを、独立したプロセスで実行します。
    exec(String[] cmdarray)
    指定されたコマンドと引数を、独立したプロセスで実行します。
    exec(String[] cmdarray, String[] envp)
    指定されたコマンドと引数を、指定された環境を持つ独立したプロセスで実行します。
    exec(String[] cmdarray, String[] envp, File dir)
    指定されたコマンドと引数を、指定された環境と作業ディレクトリを持つ独立したプロセスで実行します。
    exec(String command, String[] envp)
    指定された文字列コマンドを、指定された環境を持つ独立したプロセスで実行します。
    exec(String command, String[] envp, File dir)
    指定された文字列コマンドを、指定された環境と作業ディレクトリを持つ独立したプロセスで実行します。
    void
    exit(int status)
    現在実行しているJava仮想マシンを、シャットダウン・シーケンスを開始して終了します。
    long
    Java仮想マシン内の空きメモリーの量を返します。
    void
    gc()
    Java Virtual Machineでガベージ・コレクタを実行します。
    static Runtime
    現在のJavaアプリケーションに関連したRuntimeオブジェクトを返します。
    void
    halt(int status)
    現在実行中のJava仮想マシンを強制終了します。
    void
    load(String filename)
    filename引数によって指定されたネイティブ・ライブラリをロードします。
    void
    引数libnameによって指定されるネイティブ・ライブラリをロードします。
    long
    Java仮想マシンが使用を試みる最大メモリー容量を返します。
    boolean
    すでに登録した仮想マシンのシャットダウン・フックを登録解除します。
    void
    ファイナライズを保留しているオブジェクトのファイナライズ・メソッドを実行します。
    long
    Java仮想マシンのメモリーの総容量を返します。
    Java Runtime EnvironmentのバージョンをRuntime.Versionとして返します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • メソッドの詳細

    • getRuntime

      public static Runtime getRuntime()
      現在のJavaアプリケーションに関連したRuntimeオブジェクトを返します。 Runtimeクラスのメソッドのほとんどはインスタンス・メソッドであり、現在のランタイム・オブジェクトに対応して呼び出されなければいけません。
      戻り値:
      現在のJavaアプリケーションに関連したRuntimeオブジェクト。
    • exit

      public void exit(int status)
      現在実行しているJava仮想マシンを、シャットダウン・シーケンスを開始して終了します。 このメソッドは通常は復帰しません。 引数はステータス・コードとして作用します。通例、ゼロ以外のステータス・コードは異常終了を示します。

      登録済「シャットダウン・フック」がある場合は、未指定の順序で起動し、終了するまで同時に実行できます。 これが行われると、仮想マシンが停止します。

      すべてのシャットダウン・フックがすでに実行された後にこのメソッドが呼び出され、ステータスが0 (ゼロ)以外になった場合、このメソッドは指定されたステータス・コードで仮想マシンを停止します。 それ以外の場合、このメソッドは無期限にブロックされます。

      System.exitメソッドは、このメソッドを呼び出す従来の便利な手段です。

      パラメータ:
      status - 終了ステータス。 通例、ゼロ以外のステータス・コードは異常終了を示す。
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExitメソッドが指定されたステータスで終了することを許可しない場合
      関連項目:
    • addShutdownHook

      public void addShutdownHook(Thread hook)
      新しい仮想マシンのシャットダウン・フックを登録します。

      2種類のイベントに応答してJava仮想マシンをシャットダウンします。

      • 通常、プログラムexitsは、最後の非デーモン・スレッドが終了するか、exit (同等に、System.exit)メソッドが呼び出されたとき、または
      • 仮想マシンは、^Cの入力などによるユーザー割り込みや、ユーザー・ログオフまたはシステム・シャットダウンのようなシステム全体のイベントに応答して終了(terminate)します。

      シャットダウン・フックは初期化されただけで起動していないスレッドです。 仮想マシンがシャットダウン・シーケンスを開始すると、すべての登録済みシャットダウン・フックを、指定されていない順序で起動し並行して実行します。 すべてのフックが終了すると、フックは停止します。 exitメソッドを呼び出すことによってシャットダウンが開始された場合、非デーモン・スレッドと同様に、デーモン・スレッドはシャットダウン・シーケンス中に実行され続けることに注意してください。

      シャットダウン・シーケンスが開始されると、強制的に仮想マシンを終了するhaltメソッドを呼び出すことによってのみ停止シーケンスを停止できます。

      いったんシャットダウン・シーケンスを起動すると、新しいシャットダウン・フックを登録したり、以前に登録したフックの登録を解除したりすることはできません。 これらの操作のいずれかを試行すると、IllegalStateExceptionがスローされます。

      シャットダウン・フックは仮想マシンのライフ・サイクルの微妙な時期に起動するため、コーディングする場合は気を付ける必要があります。 特に、スレッドセーフに書き込む必要があり、できるかぎりデッドロックを避ける必要があります。 シャットダウン・フックを登録したサービスをうのみにせず、シャットダウンが進行中に登録する必要があります。 AWTイベント・ディスパッチ・スレッドなど、スレッド・ベースのその他のサービスを使用しようとすると、デッドロックが発生することがあります。

      シャットダウン・フックは迅速に終了する必要もあります。 プログラムがexitを呼び出すと、仮想マシンがすぐにシャットダウンして終了することが予想されます。 仮想マシンがユーザー・ログオフまたはシステム・シャットダウンで終了すると、基本となるオペレーティング・システムはシャットダウンまたは終了するまでの一定時間を与えます。 したがって、シャットダウン・フック中にユーザーとの対話処理をしたり長時間の計算をすることはお薦めできません。

      キャッチされない例外は、他のスレッドと同様に、スレッドThreadGroupオブジェクトのuncaughtExceptionメソッドを呼び出すことによって、シャットダウン・フックで処理されます。 このメソッドのデフォルト実装では、System.errへの例外スタック・トレースを出力し、スレッドを停止します。仮想マシンの終了または停止はしません。

      まれなケースとして、仮想マシンが異常終了することがあります。つまり、シャットダウンが正常に行われずに実行が中止される場合です。 これは仮想マシンが外部で停止された場合に起こります。たとえば、Unixの場合のSIGKILLシグナルまたは、Microsoft Windowsの場合のTerminateProcessの呼出しがその例です。 仮想マシンは、たとえば、内部データ構造の破壊、存在しないメモリーへのアクセスなどのようにネイティブ・メソッドが失敗した場合にも異常終了します。 仮想マシンが異常終了するとシャットダウン・フックの実行は保証できません。

      パラメータ:
      hook - 初期化されているが起動していないThreadオブジェクト
      例外:
      IllegalArgumentException - 指定したフックがすでに登録されている場合、あるいはフックがすでに実行中であるかまたは実行が完了したと判定される場合
      IllegalStateException - 仮想マシンがすでにシャットダウン進行中である場合
      SecurityException - セキュリティ・マネージャが存在し、RuntimePermission("shutdownHooks")を拒否する場合
      導入されたバージョン:
      1.3
      関連項目:
    • removeShutdownHook

      public boolean removeShutdownHook(Thread hook)
      すでに登録した仮想マシンのシャットダウン・フックを登録解除します。
      パラメータ:
      hook - 削除するフック
      戻り値:
      指定したフックがすでに登録され、問題なく登録解除された場合はtrue、そうでない場合はfalse
      例外:
      IllegalStateException - 仮想マシンがすでにシャットダウン進行中である場合
      SecurityException - セキュリティ・マネージャが存在し、RuntimePermission("shutdownHooks")を拒否する場合
      導入されたバージョン:
      1.3
      関連項目:
    • halt

      public void halt(int status)
      現在実行中のJava仮想マシンを強制終了します。 このメソッドは通常は復帰しません。

      このメソッドの使用には細心の注意が必要です。 exitメソッドとは異なり、このメソッドはシャットダウン・フックを開始しません。 シャットダウン・シーケンスがすでに開始されている場合、このメソッドは実行中のシャットダウン・フックを待機せずに作業を終了します。

      パラメータ:
      status - 終了ステータス。 通例、ゼロ以外のステータス・コードは異常終了を示す。 exit (同等に、System.exit)メソッドが既に呼び出されている場合、このステータス・コードはそのメソッドに渡されたステータス・コードを上書きします。
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExitメソッドが指定されたステータスで終了することを許可しない場合
      導入されたバージョン:
      1.3
      関連項目:
    • exec

      public Process exec(String command) throws IOException
      指定された文字列コマンドを、独立したプロセスで実行します。

      これは、簡易メソッドです。 exec(command)の形式の呼び出しは、exec (command, null, null)の呼び出しとまったく同じように動作します。

      パラメータ:
      command - 指定されたシステム・コマンド。
      戻り値:
      サブプロセス管理用の新しいProcessオブジェクト
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExecメソッドがサブプロセスの作成を許可しない場合
      IOException - 入出力エラーが発生した場合
      NullPointerException - commandnullの場合
      IllegalArgumentException - commandが空の場合
      関連項目:
    • exec

      public Process exec(String command, String[] envp) throws IOException
      指定された文字列コマンドを、指定された環境を持つ独立したプロセスで実行します。

      これは、簡易メソッドです。 exec(command, envp)の形式の呼び出しは、exec (command, envp, null)の呼び出しとまったく同じように動作します。

      パラメータ:
      command - 指定されたシステム・コマンド。
      envp - 文字列の配列。配列の各要素は、name=valueという形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合はnull
      戻り値:
      サブプロセス管理用の新しいProcessオブジェクト
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExecメソッドがサブプロセスの作成を許可しない場合
      IOException - 入出力エラーが発生した場合
      NullPointerException - commandnullの場合、またはenvpのいずれかの要素がnullの場合
      IllegalArgumentException - commandが空の場合
      関連項目:
    • exec

      public Process exec(String command, String[] envp, File dir) throws IOException
      指定された文字列コマンドを、指定された環境と作業ディレクトリを持つ独立したプロセスで実行します。

      これは、簡易メソッドです。 exec(command, envp, dir)という形式の呼び出しは、cmdarraycommand内のすべてのトークンの配列であるexec (cmdarray, envp, dir)の呼び出しとまったく同じように動作します。

      より正確には、呼び出しnew StringTokenizer(command)で作成したStringTokenizerを使ってcommand文字列がトークンに分割されますが、その際、文字カテゴリのさらなる変更は行われません。 トークナイザで生成されたトークンは、同じ順序で新規文字列配列のcmdarrayに配置されます。

      パラメータ:
      command - 指定されたシステム・コマンド。
      envp - 文字列の配列。配列の各要素は、name=valueという形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合はnull
      dir - サブプロセスの作業ディレクトリ。サブプロセスが現在のプロセスの作業ディレクトリを継承する場合はnull
      戻り値:
      サブプロセス管理用の新しいProcessオブジェクト
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExecメソッドがサブプロセスの作成を許可しない場合
      IOException - 入出力エラーが発生した場合
      NullPointerException - commandnullの場合、またはenvpのいずれかの要素がnullの場合
      IllegalArgumentException - commandが空の場合
      導入されたバージョン:
      1.3
      関連項目:
    • exec

      public Process exec(String[] cmdarray) throws IOException
      指定されたコマンドと引数を、独立したプロセスで実行します。

      これは、簡易メソッドです。 exec(cmdarray)の形式の呼び出しは、exec (cmdarray, null, null)の呼び出しとまったく同じように動作します。

      パラメータ:
      cmdarray - 実行するコマンドと引数を含む配列。
      戻り値:
      サブプロセス管理用の新しいProcessオブジェクト
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExecメソッドがサブプロセスの作成を許可しない場合
      IOException - 入出力エラーが発生した場合
      NullPointerException - cmdarraynullの場合、またはcmdarrayのいずれかの要素がnullの場合
      IndexOutOfBoundsException - cmdarrayが長さ0の空の配列の場合
      関連項目:
    • exec

      public Process exec(String[] cmdarray, String[] envp) throws IOException
      指定されたコマンドと引数を、指定された環境を持つ独立したプロセスで実行します。

      これは、簡易メソッドです。 exec(cmdarray, envp)の形式の呼び出しは、exec (cmdarray, envp, null)の呼び出しとまったく同じように動作します。

      パラメータ:
      cmdarray - 実行するコマンドと引数を含む配列。
      envp - 文字列の配列。配列の各要素は、name=valueという形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合はnull
      戻り値:
      サブプロセス管理用の新しいProcessオブジェクト
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExecメソッドがサブプロセスの作成を許可しない場合
      IOException - 入出力エラーが発生した場合
      NullPointerException - cmdarraynullの場合、cmdarrayのいずれかの要素がnullの場合、またはenvpのいずれかの要素がnullの場合
      IndexOutOfBoundsException - cmdarrayが長さ0の空の配列の場合
      関連項目:
    • exec

      public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException
      指定されたコマンドと引数を、指定された環境と作業ディレクトリを持つ独立したプロセスで実行します。

      コマンド行のトークンを表す文字列の配列cmdarray、および環境変数の設定を表す文字列の配列envpを指定すると、このメソッドは指定されたコマンドを実行するための新しいプロセスを作成します。

      このメソッドは、cmdarrayが有効なオペレーティング・システム・コマンドであることを確認します。 どのコマンドが有効かはシステム依存ですが、コマンドは少なくともnull以外の文字列の空でないリストである必要があります。

      envpnullの場合、サブプロセスは現在のプロセスの環境設定を継承します。

      一部のオペレーティング・システムでは、プロセスを起動するために最小限のシステム依存環境変数のセットが必要となる可能性があります。 このため、指定された環境に含まれていない追加の環境変数設定をサブプロセスが継承する可能性があります。

      現在、ProcessBuilder.start()は、変更された環境を持つプロセスを起動する方法として推奨されています。

      新しいサブプロセスの作業ディレクトリはdirで指定します。 dirnullの場合、サブプロセスは現在のプロセスの現在の作業ディレクトリを継承します。

      セキュリティ・マネージャが存在する場合、そのcheckExecメソッドが、配列cmdarrayの最初のコンポーネントを引数に指定して呼び出されます。 これにより、SecurityExceptionがスローされる可能性があります。

      オペレーティング・システム・プロセスの起動はきわめてシステムに依存します。 発生する可能性がある不具合は次のとおりです。

      • オペレーティング・システム・プログラム・ファイルが見つからなかった。
      • プログラム・ファイルへのアクセス権が拒否された。
      • 作業ディレクトリが存在しない。

      以上のケースでは、例外がスローされます。 例外の正確な特性はシステムに依存しますが、これは常にIOExceptionのサブクラスになります。

      オペレーティング・システムがプロセスの作成をサポートしていない場合は、UnsupportedOperationExceptionがスローされます。

      パラメータ:
      cmdarray - 実行するコマンドと引数を含む配列。
      envp - 文字列の配列。配列の各要素は、name=valueという形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合はnull
      dir - サブプロセスの作業ディレクトリ。サブプロセスが現在のプロセスの作業ディレクトリを継承する場合はnull
      戻り値:
      サブプロセス管理用の新しいProcessオブジェクト
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckExecメソッドがサブプロセスの作成を許可しない場合
      UnsupportedOperationException - オペレーティング・システムがプロセスの作成をサポートしていない場合。
      IOException - 入出力エラーが発生した場合
      NullPointerException - cmdarraynullの場合、cmdarrayのいずれかの要素がnullの場合、またはenvpのいずれかの要素がnullの場合
      IndexOutOfBoundsException - cmdarrayが長さ0の空の配列の場合
      導入されたバージョン:
      1.3
      関連項目:
    • availableProcessors

      public int availableProcessors()
      Java仮想マシンが使用できるプロセッサの数を返します。

      この値は、仮想マシンの呼出し中に変更される可能性があります。 このため、利用可能なプロセッサ数に影響を受けるアプリケーションは、このプロパティをときどきポーリングして、リソース使用法を調整する必要があります。

      戻り値:
      仮想マシンから利用可能な最大プロセッサ数。この値が1より小さくなることはない
      導入されたバージョン:
      1.4
    • freeMemory

      public long freeMemory()
      Java仮想マシン内の空きメモリーの量を返します。 gcメソッドを呼び出すと、freeMemoryから返される値が増える可能性があります
      戻り値:
      将来割り当てられるオブジェクトに利用可能な現在のメモリーの総容量(バイト単位)
    • totalMemory

      public long totalMemory()
      Java仮想マシンのメモリーの総容量を返します。 ホストの環境によっては、このメソッドによって返される値が時間とともに変化する場合があります。

      任意の指定された型のオブジェクトを格納するのに必要なメモリー容量は、実装によって異なります。

      戻り値:
      現在および将来のオブジェクトに利用可能な現在のメモリーの総容量(バイト単位)。
    • maxMemory

      public long maxMemory()
      Java仮想マシンが使用を試みる最大メモリー容量を返します。 固有の制限が存在しない場合、値Long.MAX_VALUEが返されます。
      戻り値:
      仮想マシンが使用を試みる最大メモリー容量(単位はバイト)
      導入されたバージョン:
      1.4
    • gc

      public void gc()
      Java Virtual Machineでガベージ・コレクタを実行します。

      このメソッドを呼び出すことで、Java Virtual Machineが現在使用中のメモリーをJava Virtual Machineで再利用できるようにするために、使用されていないオブジェクトをリサイクルする手間がかかります。 制御がメソッド・コールから戻ると、Java Virtual Machineは、未使用のすべてのオブジェクトから領域を再利用するためのベスト・エフォートをしました。 この労力が特定の数の未使用オブジェクトをリサイクルしたり、一定の量の領域を再利用したり、一度に完了しても、メソッドが復帰するか、または必ずメソッドが戻ることは保証されません。 また、この作業によって、特定の数のオブジェクトにおける到達可能性の変更、または特定の数のReferenceオブジェクトがクリアされてエンキューされるという保証はありません。

      gcというメソッド名は「garbage collector」の頭字をとったものです。 Java Virtual Machineでは、gcメソッドが明示的に起動されていない場合でも、必要に応じて個別のスレッドでこのリサイクル・プロセスが自動的に実行されます。

      このメソッドを呼び出すには、System.gc()メソッドが一般的で便利です。

    • runFinalization

      public void runFinalization()
      ファイナライズを保留しているオブジェクトのファイナライズ・メソッドを実行します。 このメソッドを呼び出すと、Java仮想マシンは、破棄されたにもかかわらずfinalizeメソッドが実行されていないオブジェクトのfinalizeメソッドを実行しようとします。 メソッド呼び出しから制御が戻された時点で、仮想マシンはすべてのファイナライズを完了するよう最善を尽くしたことになります。

      runFinalizationメソッドが明示的には呼び出されなかった場合でも、仮想マシンはこのファイナライズ・プロセスを必要に応じて自動的に、別のスレッドで実行します。

      このメソッドを呼び出すには、System.runFinalization()メソッドが一般的で便利です。

      関連項目:
    • load

      public void load(String filename)
      filename引数によって指定されたネイティブ・ライブラリをロードします。 filename引数は絶対パス名である必要があります(例: Runtime.getRuntime().load("/home/avh/lib/libX11.so");)。 filename引数(プラットフォーム固有のライブラリ接頭辞、パス、およびファイル拡張子がすべて取り除かれている場合)が、たとえばLという名前のライブラリを示し、Lというネイティブ・ライブラリがVMと静的にリンクされている場合は、ダイナミック・ライブラリのロードを試みるのではなく、そのライブラリによってエクスポートされるJNI_OnLoad_L関数が呼び出されます。 その引数と一致するファイル名がファイル・システム内に存在する必要はありません。 詳細については、「JNI仕様」を参照してください。 それ以外の場合、filename引数は実装に依存した方法でネイティブ・ライブラリ・イメージにマップされます。

      まず、セキュリティ・マネージャが存在する場合は、checkLinkメソッドがfilenameをその引数に指定して呼び出されます。 これはセキュリティ例外となる場合があります。

      これはloadLibrary(String)メソッドと似ていますが、ライブラリ名ではなく一般的なファイル名を引数として指定できるため、ネイティブ・コードで書かれた任意のファイルがロード可能になります。

      このメソッドを呼び出すには、System.load(String)メソッドが一般的で便利です。

      パラメータ:
      filename - ロードするファイル。
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckLinkメソッドが、指定されたダイナミック・ライブラリのロードを許可しない場合
      UnsatisfiedLinkError - filenameが絶対パス名でない場合、ネイティブ・ライブラリがVMと静的にリンクされていない場合、またはホスト・システムがそのライブラリをネイティブ・ライブラリ・イメージにマップできない場合。
      NullPointerException - filenamenullである場合
      関連項目:
    • loadLibrary

      public void loadLibrary(String libname)
      引数libnameによって指定されるネイティブ・ライブラリをロードします。 libname引数には、プラットフォーム固有の接頭辞、ファイル拡張子、またはパスを含めないでください。 libnameというネイティブ・ライブラリがVMと静的にリンクされている場合は、そのライブラリによってエクスポートされるJNI_OnLoad_libname関数が呼び出されます。 詳細については、「JNI仕様」を参照してください。 それ以外の場合、libname引数はシステム・ライブラリのロケーションからロードされ、実装に依存する方法でネイティブ・ライブラリ・イメージにマップされます。

      まず、セキュリティ・マネージャが存在する場合は、checkLinkメソッドがlibnameをその引数に指定して呼び出されます。 これはセキュリティ例外となる場合があります。

      このメソッドを呼び出すには、System.loadLibrary(String)メソッドが一般的で便利です。 ネイティブ・メソッドをクラスの実装で使用する場合、標準的には、ネイティブ・コードをライブラリ・ファイル(ここでは、説明上LibFileとする)に入れてから、次のstatic初期化子を、

       static { System.loadLibrary("LibFile"); }
       
      クラス宣言に入れます。 こうすれば、クラスがロードおよび初期化されるとき、ネイティブ・メソッドに必要なネイティブ・コードの実装も同じようにロードされます。

      同じライブラリ名を指定してこのメソッドを複数回呼び出しても、2回目以降の呼出しは無視されます。

      パラメータ:
      libname - ライブラリの名前。
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckLinkメソッドが、指定されたダイナミック・ライブラリのロードを許可しない場合
      UnsatisfiedLinkError - libname引数にファイル・パスが含まれている場合、ネイティブ・ライブラリがVMと静的にリンクされていない場合、またはホスト・システムがそのライブラリをネイティブ・ライブラリ・イメージにマップできない場合。
      NullPointerException - libnamenullである場合
      関連項目:
    • version

      public static Runtime.Version version()
      Java Runtime EnvironmentのバージョンをRuntime.Versionとして返します。
      戻り値:
      Java Runtime EnvironmentのRuntime.Version
      導入されたバージョン:
      9