|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.lang.Runtime
public class Runtime
Java アプリケーションはすべて、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()
ファイナライズを中断しているオブジェクトの finalize メソッドを実行します。 |
static void |
runFinalizersOnExit(boolean value)
推奨されていません。 このメソッドは本質的に安全ではありません。ほかのスレッドが同時にそれらのオブジェクトを操作しているときに、生存中のオブジェクトに対してファイナライザが呼び出され、これにより、エラー動作またはデッドロックが発生します。 |
long |
totalMemory()
Java 仮想マシンのメモリの総容量を返します。 |
void |
traceInstructions(boolean on)
命令のトレースを有効または無効にします。 |
void |
traceMethodCalls(boolean on)
メソッド呼び出しのトレースを有効または無効にします。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
メソッドの詳細 |
---|
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) する
「シャットダウンフック」は初期化されただけで起動していないスレッドです。仮想マシンがシャットダウンシーケンスを開始すると、すべての登録済みシャットダウンフックを、指定されていない順序で起動し同時実行します。フックがすべて終了すると、終了時のファイナライズが有効である場合はすべての呼び出されていないファイナライザを実行します。最後に、仮想マシンは停止します。exit
を呼び出してシャットダウンが開始された場合は、デーモンではないスレッドと同様、デーモンスレッドはシャットダウンシーケンスの間、実行を続けます。
一旦シャットダウンシーケンスが起動すると、強制的に仮想マシンを停止させる halt
メソッドを呼び出した場合だけ中止できます。
一旦シャットダウンシーケンスを起動すると、新しいシャットダウンフックを登録したり、以前に登録したフックの登録を解除したりすることはできません。このようなオペレーションのどれかを実行しようとすると、IllegalStateException
がスローされます。
シャットダウンフックは仮想マシンのライフサイクルの微妙な時期に起動するため、コーディングする場合は気を付ける必要があります。特に、スレッドセーフに書き込む必要があり、できるかぎりデッドロックを避ける必要があります。シャットダウンフックを登録したサービスをうのみにせず、シャットダウンが進行中に登録する必要があります。
シャットダウンフックは迅速に終了する必要もあります。プログラムが 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)
セキュリティマネージャが存在する場合は、確実に終了が許可されるように、最初に引数を 0 として checkExit
メソッドが呼び出されます。この結果、SecurityException がスローされることがあります。
value
- 終了時のファイナライズを有効にする場合は true、無効にする場合は false
SecurityException
- セキュリティマネージャが存在し、セキュリティマネージャの 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
にあるすべてのトークンの配列です。
より正確には、command
文字列は文字カテゴリがこれ以上変更されることなく、new
の呼び出しで作成された StringTokenizer
(command)StringTokenizer
を使ってトークンに分割されます。トークナイザで生成されたトークンは、同じ順序で新規文字列配列の cmdarray
に配置されます。
command
- 指定されたシステムコマンドenvp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合は nulldir
- サブプロセスが現在のプロセスの作業ディレクトリを継承する場合は、サブプロセスの作業ディレクトリ、または 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 の場合は、サブプロセスは現在のプロセスの現在の作業ディレクトリを継承します。
セキュリティマネージャが存在する場合は、cmdarray
配列の最初のコンポーネントを引数として使って checkExec
メソッドが呼び出されます。この結果、SecurityException
がスローされることがあります。
オペレーティングシステムプロセスの起動はきわめてシステムに依存します。発生する可能性がある不具合は次のとおりです。
以上のケースでは、例外がスローされます。例外の正確な特性はシステムに依存しますが、これは常に IOException
のサブクラスになります。
cmdarray
- 実行するコマンドと引数を含む配列envp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持する。または、サブプロセスが現在のプロセスの環境を継承する場合は nulldir
- サブプロセスが現在のプロセスの作業ディレクトリを継承する場合は、サブプロセスの作業ディレクトリ、または 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)
java_g
から利用すると、「.so」の前に「_g」が自動的に挿入されます (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
- 地域対応する InputStream
InputStream
,
BufferedReader.BufferedReader(java.io.Reader)
,
InputStreamReader.InputStreamReader(java.io.InputStream)
@Deprecated public OutputStream getLocalizedOutputStream(OutputStream out)
OutputStreamWriter
クラス、BufferedWriter
クラス、および PrintWriter
クラスを使う方が適切です。
OutputStream
を受け取り、地域対応されている以外は引数のストリームとまったく同じである OutputStream
を返します。Unicode をストリームに書き込む際には、Unicode からローカル文字セットに自動的に変換します。
引数に指定したストリームが地域対応済みである場合は、そのまま結果として返されます。
out
- 地域対応する OutputStream
OutputStream
,
BufferedWriter.BufferedWriter(java.io.Writer)
,
OutputStreamWriter.OutputStreamWriter(java.io.OutputStream)
,
PrintWriter.PrintWriter(java.io.OutputStream)
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。