public class Runtime extends Object
Runtime
クラスの単一のインスタンスを持ちます。このクラスは、アプリケーションとアプリケーション実行環境とのインタフェースになります。現在の Runtime オブジェクトは、getRuntime
メソッドにより取得できます。
アプリケーションは、自分の Runtime クラスのインスタンスを生成することはできません。
getRuntime()
修飾子と型 | メソッドと説明 |
---|---|
void |
addShutdownHook(Thread hook)
新しい仮想マシンのシャットダウンフックを登録します。
|
int |
availableProcessors()
Java 仮想マシンが使用できるプロセッサの数を返します。
|
Process |
exec(String command)
指定された文字列コマンドを、独立したプロセスで実行します。
|
Process |
exec(String[] cmdarray)
指定されたコマンドと引数を、独立したプロセスで実行します。
|
Process |
exec(String[] cmdarray, String[] envp)
指定されたコマンドと引数を、指定された環境を持つ独立したプロセスで実行します。
|
Process |
exec(String[] cmdarray, String[] envp, File dir)
指定されたコマンドと引数を、指定された環境と作業ディレクトリを持つ独立したプロセスで実行します。
|
Process |
exec(String command, String[] envp)
指定された文字列コマンドを、指定された環境を持つ独立したプロセスで実行します。
|
Process |
exec(String command, String[] envp, File dir)
指定された文字列コマンドを、指定された環境と作業ディレクトリを持つ独立したプロセスで実行します。
|
void |
exit(int status)
現在実行している Java 仮想マシンを、シャットダウンシーケンスを開始して終了します。
|
long |
freeMemory()
Java 仮想マシン内の空きメモリーの量を返します。
|
void |
gc()
ガベージコレクタを実行します。
|
InputStream |
getLocalizedInputStream(InputStream in)
非推奨。
JDK 1.1 以降、ローカルなエンコーディングのバイトストリームを Unicode の文字ストリームに変換するには、
InputStreamReader および BufferedReader クラスを使うことが推奨されています。 |
OutputStream |
getLocalizedOutputStream(OutputStream out)
非推奨。
JDK 1.1 以降、Unicode の文字ストリームをローカルなエンコーディングのバイトストリームに変換するには、
OutputStreamWriter 、BufferedWriter 、および PrintWriter クラスを使うことが推奨されています。 |
static Runtime |
getRuntime()
現在の Java アプリケーションに関連した Runtime オブジェクトを返します。
|
void |
halt(int status)
現在実行中の Java 仮想マシンを強制終了します。
|
void |
load(String filename)
指定されたファイル名をダイナミックライブラリとしてロードします。
|
void |
loadLibrary(String libname)
指定されたライブラリ名を持つダイナミックライブラリをロードします。
|
long |
maxMemory()
Java 仮想マシンが使用を試みる最大メモリー容量を返します。
|
boolean |
removeShutdownHook(Thread hook)
すでに登録した仮想マシンのシャットダウンフックを登録解除します。
|
void |
runFinalization()
ファイナライズを保留しているオブジェクトのファイナライズメソッドを実行します。
|
static void |
runFinalizersOnExit(boolean value)
非推奨。
このメソッドは本質的に安全ではありません。ファイナライザがライブオブジェクトに対して呼び出される結果になる可能性があり、そのときにほかのスレッドがそれらのオブジェクトを並行して操作していると、動作が異常になるか、デッドロックが発生します。
|
long |
totalMemory()
Java 仮想マシンのメモリーの総容量を返します。
|
void |
traceInstructions(boolean on)
命令のトレースを有効または無効にします。
|
void |
traceMethodCalls(boolean on)
メソッド呼び出しのトレースを有効または無効にします。
|
public static Runtime getRuntime()
Runtime
クラスのメソッドのほとんどはインスタンスメソッドであり、現在のランタイムオブジェクトに対応して呼び出されなければいけません。Runtime
オブジェクト。public void exit(int status)
仮想マシンのシャットダウンシーケンスは 2 つの段階で構成されます。 第 1 段階では、すべての登録済みのシャットダウンフック
は (ある場合)、特に指定していない順序で起動し、終了するまで並行して実行できます。 第 2 段階では、終了時のファイナライズ
が有効になっている場合に、呼び出されていないすべてのファイナライザが実行されます。 これが行われると、仮想マシンが停止
します。
仮想マシンがシャットダウンシーケンスを開始したあとにこのメソッドが呼び出されると、シャットダウンフックがこのメソッドを実行している場合は無期限にブロックされます。シャットダウンフックがすでに実行されており終了時のファイナライズが有効になっているときは、ステータスがゼロ以外の場合は仮想マシンを指定したステータスコードで停止し、そうでない場合は無期限にブロックします。
このメソッドを呼び出すには、System.exit
メソッドが一般的で便利です。
status
- 終了ステータス。通例、ゼロ以外のステータスコードは異常終了を示す。SecurityException
- セキュリティーマネージャーが存在するときに、その checkExit
メソッドが指定されたステータスでの終了を許可しない場合SecurityException
, SecurityManager.checkExit(int)
, addShutdownHook(java.lang.Thread)
, removeShutdownHook(java.lang.Thread)
, runFinalizersOnExit(boolean)
, halt(int)
public void addShutdownHook(Thread hook)
2 種類のイベントに応答して Java 仮想マシンをシャットダウンします。
exit
(または同等の System.exit
) メソッドが呼び出されたときです。あるいは、
シャットダウンフックは初期化されただけで起動していないスレッドです。仮想マシンがシャットダウンシーケンスを開始すると、すべての登録済みシャットダウンフックを、指定されていない順序で起動し並行して実行します。フックがすべて終了すると、終了時のファイナライズが有効である場合はすべての呼び出されていないファイナライザを実行します。最後に、仮想マシンは停止します。 exit
メソッドを呼び出してシャットダウンが開始された場合は、デーモンではないスレッドと同様、デーモンスレッドはシャットダウンシーケンスの間、実行を続けます。
いったんシャットダウンシーケンスが起動すると、強制的に仮想マシンを停止させる halt
メソッドを呼び出した場合のみ中止できます。
いったんシャットダウンシーケンスを起動すると、新しいシャットダウンフックを登録したり、以前に登録したフックの登録を解除したりすることはできません。これらのオペレーションのいずれかを試みると、IllegalStateException
がスローされます。
シャットダウンフックは仮想マシンのライフサイクルの微妙な時期に起動するため、コーディングする場合は気を付ける必要があります。特に、スレッドセーフに書き込む必要があり、できるかぎりデッドロックを避ける必要があります。シャットダウンフックを登録したサービスをうのみにせず、シャットダウンが進行中に登録する必要があります。AWT イベントディスパッチスレッドなど、スレッドベースのその他のサービスを使用しようとすると、デッドロックが発生することがあります。
シャットダウンフックは迅速に終了する必要もあります。 プログラムが exit
を呼び出すと、仮想マシンはただちにシャットダウンして終了するものと見なされます。仮想マシンがユーザーログオフまたはシステムシャットダウンで終了すると、基本となるオペレーティングシステムはシャットダウンまたは終了するまでの一定時間を与えます。したがって、シャットダウンフック中にユーザーとの対話処理をしたり長時間の計算をすることはお勧めできません。
キャッチされなかった例外は、シャットダウンフックでは、ほかのスレッドの場合と同様に処理されます。つまり、スレッドの ThreadGroup
オブジェクトの uncaughtException
メソッドが呼び出されます。 このメソッドのデフォルト実装は System.err
への例外スタックトレースを出力しスレッドを停止します。仮想マシンの終了または停止はしません。
まれなケースとして、仮想マシンが異常終了することがあります。つまり、シャットダウンが正常に行われずに実行が中止される場合です。 これは仮想マシンが外部で停止された場合に起こります。たとえば、Unix の場合の SIGKILL シグナルまたは、Microsoft Windows の場合の TerminateProcess の呼び出しがその例です。仮想マシンは、たとえば、内部データ構造の破壊、存在しないメモリーへのアクセスなどのようにネイティブメソッドが失敗した場合にも異常終了します。仮想マシンが異常終了するとシャットダウンフックの実行は保証できません。
hook
- 初期化はされたが起動はされていない Thread
オブジェクトIllegalArgumentException
- 指定したフックがすでに登録されている場合、あるいはフックがすでに実行中であるかまたは実行が完了したと判定される場合IllegalStateException
- 仮想マシンがすでにシャットダウン進行中である場合SecurityException
- セキュリティーマネージャーが存在し、それが RuntimePermission
("shutdownHooks") を拒否した場合removeShutdownHook(java.lang.Thread)
, halt(int)
, exit(int)
public boolean removeShutdownHook(Thread hook)
hook
- 削除するフックIllegalStateException
- 仮想マシンがすでにシャットダウン進行中である場合SecurityException
- セキュリティーマネージャーが存在し、それが RuntimePermission
("shutdownHooks") を拒否した場合addShutdownHook(java.lang.Thread)
, exit(int)
public void halt(int status)
このメソッドの使用には細心の注意が必要です。 exit
メソッドとは異なり、このメソッドではシャットダウンフックを起動できず、終了時のファイナライズが有効な場合は呼び出されていないファイナライザを実行しません。すでにシャットダウンシーケンスが開始されている場合は、このメソッドは実行中のシャットダウンフックまたはファイナライザを待機しないで終了します。
status
- 終了ステータス。通例、ゼロ以外のステータスコードは異常終了を示す。 exit
(または同等の System.exit
) メソッドがすでに呼び出されていた場合、このステータスコードはそのメソッドに渡されたステータスコードをオーバーライドします。SecurityException
- セキュリティーマネージャーが存在するときに、その checkExit
メソッドが指定されたステータスでの終了を許可しない場合exit(int)
, addShutdownHook(java.lang.Thread)
, removeShutdownHook(java.lang.Thread)
@Deprecated public static void runFinalizersOnExit(boolean value)
セキュリティーマネージャーが存在する場合、終了が許可されるように、最初にその checkExit
メソッドが 0 を引数に指定して呼び出されます。この結果、SecurityException がスローされることがあります。
value
- 終了時のファイナライズを有効にする場合は true、無効にする場合は falseSecurityException
- セキュリティーマネージャーが存在し、その checkExit
メソッドが終了を許可しない場合。exit(int)
, gc()
, SecurityManager.checkExit(int)
public Process exec(String command) throws IOException
これは、簡易メソッドです。 exec(command) 形式の呼び出しの動作は、呼び出し exec
(command, null, null) とまったく同じになります。
command
- 指定されたシステムコマンド。Process
オブジェクトSecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合IOException
- 入出力エラーが発生した場合NullPointerException
- command
が null
の場合IllegalArgumentException
- command
が空の場合exec(String[], String[], File)
, ProcessBuilder
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
- command
が null
の場合、または envp
のいずれかの要素が null
の場合IllegalArgumentException
- command
が空の場合exec(String[], String[], File)
, ProcessBuilder
public Process exec(String command, String[] envp, File dir) throws IOException
これは、簡易メソッドです。 exec(command, envp, dir) 形式の呼び出しの動作は、呼び出し exec
(cmdarray, envp, dir) とまったく同じになります (cmdarray
は command
内のすべてのトークンを含む配列)。
より正確には、呼び出し new
で作成した StringTokenizer
(command)StringTokenizer
を使って command
文字列がトークンに分割されますが、その際、文字カテゴリのさらなる変更は行われません。 トークナイザで生成されたトークンは、同じ順序で新規文字列配列の cmdarray
に配置されます。
command
- 指定されたシステムコマンド。envp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合は null。dir
- サブプロセスの作業ディレクトリ。サブプロセスが現在のプロセスの作業ディレクトリを継承する場合は null。Process
オブジェクトSecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合IOException
- 入出力エラーが発生した場合NullPointerException
- command
が null
の場合、または envp
のいずれかの要素が null
の場合IllegalArgumentException
- command
が空の場合ProcessBuilder
public Process exec(String[] cmdarray) throws IOException
これは、簡易メソッドです。 exec(cmdarray) 形式の呼び出しの動作は、呼び出し exec
(cmdarray, null, null) とまったく同じになります。
cmdarray
- 実行するコマンドと引数を含む配列。Process
オブジェクトSecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合IOException
- 入出力エラーが発生した場合NullPointerException
- cmdarray
が null
の場合、または cmdarray
のいずれかの要素が null
の場合IndexOutOfBoundsException
- cmdarray
が長さ 0
の空の配列の場合ProcessBuilder
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
- cmdarray
が null
の場合、cmdarray
のいずれかの要素が null
の場合、または envp
のいずれかの要素が null
の場合IndexOutOfBoundsException
- cmdarray
が長さ 0
の空の配列の場合ProcessBuilder
public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException
コマンド行のトークンを表す文字列の配列 cmdarray
、および環境変数の設定を表す文字列の配列 envp
を指定すると、このメソッドは指定されたコマンドを実行するための新しいプロセスを作成します。
このメソッドは、cmdarray
が有効なオペレーティングシステムコマンドであることを確認します。どのコマンドが有効かはシステム依存ですが、コマンドは少なくとも null 以外の文字列の空でないリストである必要があります。
envp が null の場合、サブプロセスは現在のプロセスの環境設定を継承します。
一部のオペレーティングシステムでは、プロセスを起動するために最小限のシステム依存環境変数のセットが必要となる可能性があります。このため、指定された環境に含まれていない追加の環境変数設定をサブプロセスが継承する可能性があります。
現在、ProcessBuilder.start()
は、変更された環境を持つプロセスを起動する方法として推奨されています。
新しいサブプロセスの作業ディレクトリは dir で指定します。dir が null の場合、サブプロセスは現在のプロセスの現在の作業ディレクトリを継承します。
セキュリティーマネージャーが存在する場合、その checkExec
メソッドが、配列 cmdarray
の最初のコンポーネントを引数に指定して呼び出されます。これにより、SecurityException
がスローされる可能性があります。
オペレーティングシステムプロセスの起動はきわめてシステムに依存します。発生する可能性がある不具合は次のとおりです。
以上のケースでは、例外がスローされます。例外の正確な特性はシステムに依存しますが、これは常に IOException
のサブクラスになります。
cmdarray
- 実行するコマンドと引数を含む配列。envp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合は null。dir
- サブプロセスの作業ディレクトリ。サブプロセスが現在のプロセスの作業ディレクトリを継承する場合は null。Process
オブジェクトSecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合IOException
- 入出力エラーが発生した場合NullPointerException
- cmdarray
が null
の場合、cmdarray
のいずれかの要素が null
の場合、または envp
のいずれかの要素が null
の場合IndexOutOfBoundsException
- cmdarray
が長さ 0
の空の配列の場合ProcessBuilder
public int availableProcessors()
この値は、仮想マシンの呼び出し中に変更される可能性があります。このため、利用可能なプロセッサ数に影響を受けるアプリケーションは、このプロパティーをときどきポーリングして、リソース使用法を調整する必要があります。
public long freeMemory()
gc
メソッドを呼び出すと、freeMemory.
から返される値が増える可能性がありますpublic long totalMemory()
任意の指定された型のオブジェクトを格納するのに必要なメモリー容量は、実装によって異なります。
public long maxMemory()
Long.MAX_VALUE
が返されます。public void gc()
gc
というメソッド名は「garbage collector」の頭字をとったものです。gc
が明示的には呼び出されなかった場合でも、仮想マシンはこの再利用プロセスを必要に応じて自動的に、別のスレッドで実行します。
このメソッドを呼び出すには、System.gc()
メソッドが一般的で便利です。
public void runFinalization()
finalize
メソッドが実行されていないオブジェクトの finalize
メソッドを実行しようとします。メソッド呼び出しから制御が戻された時点で、仮想マシンはすべてのファイナライズを完了するよう最善を尽くしたことになります。
runFinalization
メソッドが明示的には呼び出されなかった場合でも、仮想マシンはこのファイナライズプロセスを必要に応じて自動的に、別のスレッドで実行します。
このメソッドを呼び出すには、System.runFinalization()
メソッドが一般的で便利です。
Object.finalize()
public void traceInstructions(boolean on)
boolean
引数が true
である場合、このメソッドを呼び出すと、Java 仮想マシンは、仮想マシン内の各命令のデバッグ情報を実行時に出力します。この情報の書式や、出力先となるファイルなどの出力ストリームは、ホスト環境によって異なります。この機能をサポートしない場合、仮想マシンは要求を無視する場合があります。トレースの出力先はシステムによって異なります。
boolean
引数に false
を指定すると、仮想マシンは命令の詳細トレースの出力を停止します。
on
- 命令のトレースを有効にする場合は true
、この機能を無効にする場合は false
。public void traceMethodCalls(boolean on)
boolean
引数が true
である場合、このメソッドを呼び出すと、Java 仮想マシンは、仮想マシン内の各メソッドのデバッグ情報を呼び出し時に出力します。この情報の書式や、出力先となるファイルなどの出力ストリームは、ホスト環境によって異なります。この機能をサポートしない場合、仮想マシンは要求を無視する場合があります。
引数を false にしてこのメソッドを呼び出すと、仮想マシンは、呼び出しごとのデバッグ情報の出力を停止します。
on
- 命令のトレースを有効にする場合は true
、この機能を無効にする場合は false
。public void load(String filename)
Runtime.getRuntime().load("/home/avh/lib/libX11.so");
)。
まず、セキュリティーマネージャーが存在する場合は、checkLink
メソッドが filename
をその引数に指定して呼び出されます。これはセキュリティー例外となる場合があります。
これは loadLibrary(String)
メソッドと似ていますが、ライブラリ名ではなく一般的なファイル名を引数として指定できるため、ネイティブコードで書かれた任意のファイルがロード可能になります。
このメソッドを呼び出すには、System.load(String)
メソッドが一般的で便利です。
filename
- ロードするファイル。SecurityException
- セキュリティーマネージャーが存在し、その checkLink
メソッドが、指定されたダイナミックライブラリのロードを許可しない場合UnsatisfiedLinkError
- ファイルが存在しない場合。NullPointerException
- filename
が null
である場合getRuntime()
、SecurityException
, SecurityManager.checkLink(java.lang.String)
public void loadLibrary(String libname)
まず、セキュリティーマネージャーが存在する場合は、checkLink
メソッドが libname
をその引数に指定して呼び出されます。これはセキュリティー例外となる場合があります。
このメソッドを呼び出すには、System.loadLibrary(String)
メソッドが一般的で便利です。ネイティブメソッドをクラスの実装で使用する場合、標準的には、ネイティブコードをライブラリファイル (ここでは、説明上 LibFile
とする) に入れてから、次の static 初期化子を、
クラス宣言に入れます。こうすれば、クラスがロードおよび初期化されるとき、ネイティブメソッドに必要なネイティブコードの実装も同じようにロードされます。static { System.loadLibrary("LibFile"); }
同じライブラリ名を指定してこのメソッドを複数回呼び出しても、2 回目以降の呼び出しは無視されます。
libname
- ライブラリの名前。SecurityException
- セキュリティーマネージャーが存在し、その checkLink
メソッドが、指定されたダイナミックライブラリのロードを許可しない場合UnsatisfiedLinkError
- ライブラリが存在しない場合。NullPointerException
- libname
が null
である場合SecurityException
, SecurityManager.checkLink(java.lang.String)
@Deprecated public InputStream getLocalizedInputStream(InputStream in)
InputStreamReader
および BufferedReader
クラスを使うことが推奨されています。InputStream
を受け取り、ローカライズされている以外は引数のストリームとまったく同じである InputStream
を返します。ローカル文字セットの文字をストリームから読み込む際には、ローカル文字セットから Unicode に自動的に変換します。
引数に指定したストリームが地域対応済みである場合は、そのまま結果として返されます。
in
- 地域対応する InputStreamInputStream
, BufferedReader.BufferedReader(java.io.Reader)
, InputStreamReader.InputStreamReader(java.io.InputStream)
@Deprecated public OutputStream getLocalizedOutputStream(OutputStream out)
OutputStreamWriter
、BufferedWriter
、および PrintWriter
クラスを使うことが推奨されています。OutputStream
を受け取り、ローカライズされている以外は引数のストリームとまったく同じである OutputStream
を返します。Unicode をストリームに書き込む際には、Unicode からローカル文字セットに自動的に変換します。
引数に指定したストリームが地域対応済みである場合は、そのまま結果として返されます。
out
- 地域対応する OutputStreamOutputStream
, BufferedWriter.BufferedWriter(java.io.Writer)
, OutputStreamWriter.OutputStreamWriter(java.io.OutputStream)
, PrintWriter.PrintWriter(java.io.OutputStream)
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.