|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 cmd,
String[] envp)
指定された文字列コマンドを、指定された環境を持つ独立したプロセスで実行します。 |
Process |
exec(String command,
String[] envp,
File dir)
指定された文字列コマンドを、指定された環境と作業ディレクトリを持つ独立したプロセスで実行します。 |
void |
exit(int status)
現在実行している Java 仮想マシンを、シャットダウンシーケンスを開始して終了します。 |
long |
freeMemory()
Java 仮想マシン内の空きメモリーの量を返します。 |
void |
gc()
ガベージコレクタを実行します。 |
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()
ファイナライズを保留しているオブジェクトのファイナライズメソッドを実行します。 |
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
メソッドが一般的で便利です。
プロセスモデルが存在する場合、Runtime.exit() はプロセスが終了してリソースが解放されるものと見込む必要があります。
プロセスモデルが存在せずにセキュリティーマネージャーが存在する場合、セキュリティーマネージャーはデフォルトで SecurityException をスローすることにより、Runtime.exit() の呼び出しを禁止する必要があります。そうでない場合、呼び出し時にシステムが無制限にハングアップします。
status
- 終了ステータス。通例、ゼロ以外のステータスコードは異常終了を示す
SecurityException
- セキュリティーマネージャーが存在し、セキュリティーマネージャーの checkExit
メソッドが指定されたステータスでの終了を許可しない場合SecurityException
,
SecurityManager.checkExit(int)
,
addShutdownHook(java.lang.Thread)
,
removeShutdownHook(java.lang.Thread)
,
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
メソッドとは異なり、このメソッドではシャットダウンフックを起動できず、終了時のファイナライズが有効な場合は呼び出されていないファイナライザを実行しません。すでにシャットダウンシーケンスが開始されている場合は、このメソッドは実行中のシャットダウンフックまたはファイナライザを待機しないで終了します。
プロセスモデルが存在する場合、Runtime.halt() はプロセスが終了してリソースが解放されるものと見込む必要があります。
プロセスモデルが存在せずにセキュリティーマネージャーが存在する場合、セキュリティーマネージャーはデフォルトで SecurityException をスローすることにより、Runtime.halt() の呼び出しを禁止する必要があります。そうでない場合、呼び出し時にシステムが無制限にハングアップします。
status
- 終了ステータス。通例、ゼロ以外のステータスコードは異常終了を示すexit
(System.exit
と同等) メソッドがすでに呼び出されている場合は、そのメソッドに渡されたステータスコードをオーバーライドする
SecurityException
- セキュリティーマネージャーが存在し、セキュリティーマネージャーの checkExit
メソッドが指定されたステータスでの終了を許可しない場合exit(int)
,
addShutdownHook(java.lang.Thread)
,
removeShutdownHook(java.lang.Thread)
public Process exec(String command) throws IOException
command
引数はトークンに解析され、その後独立したプロセスとして実行されます。トークンの構文解析は、次の呼び出しで作成される StringTokenizer
が実行します。
このとき、文字カテゴリがこれ以上変更されることはありません。このメソッドは、new StringTokenizer(command)
exec(command, null)
とまったく同じ効果を持ちます。 プロセスモデルが存在する場合、Runtime.exec() は J2SE 仕様での動作と同じ動作を実行する必要があります。
プロセスモデルが存在しない場合は、Runtime.exec() およびすべての java.lang.Process メソッドは SecurityException をスローする必要があります。
command
- 指定されたシステムコマンド
Process
オブジェクト
SecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合
IOException
- 入出力エラーが発生した場合
NullPointerException
- command
が null
の場合
IllegalArgumentException
- command
が空の場合exec(java.lang.String, java.lang.String[])
,
SecurityManager.checkExec(java.lang.String)
public Process exec(String cmd, String[] envp) throws IOException
このメソッドは command
の文字列をトークンに分解してから、トークンを文字列トークナイザで生成された順番に格納する新しい配列 cmdarray
を作成します。その次にメソッドは exec(cmdarray, envp)
という呼び出しを実行します。トークンの構文解析は、次の呼び出しで作成される StringTokenizer
が実行します。
このとき、文字カテゴリがこれ以上変更されることはありません。new StringTokenizer(command)
環境変数設定は envp で指定します。envp が null の場合、サブプロセスは現在のプロセスの環境設定を継承します。
プロセスモデルが存在する場合、Runtime.exec() は J2SE 内と同じ動作を実行する必要があります。
プロセスモデルが存在しない場合は、Runtime.exec() およびすべての java.lang.Process メソッドは SecurityException をスローする必要があります。
cmd
- 指定されたシステムコマンドenvp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持する
Process
オブジェクト
SecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合
IOException
- 入出力エラーが発生した場合
NullPointerException
- cmd
が null の場合
IllegalArgumentException
- cmd
が空の場合exec(java.lang.String[])
,
exec(java.lang.String[], java.lang.String[])
,
SecurityManager.checkExec(java.lang.String)
public Process exec(String command, String[] envp, File dir) throws IOException
このメソッドは command
の文字列をトークンに分解してから、トークンを文字列トークナイザで生成された順番に格納する新しい配列 cmdarray
を作成します。その次にメソッドは exec(cmdarray, envp)
という呼び出しを実行します。トークンの構文解析は、次の呼び出しで作成される StringTokenizer
が実行します。
このとき、文字カテゴリがこれ以上変更されることはありません。new StringTokenizer(command)
環境変数設定は envp で指定します。envp が null の場合、サブプロセスは現在のプロセスの環境設定を継承します。
新しいサブプロセスの作業ディレクトリは dir で指定します。dir が null の場合は、サブプロセスは現在のプロセスの現在の作業ディレクトリを継承します。
プロセスモデルが存在する場合、Runtime.exec() は J2SE 仕様での動作と同じ動作を実行する必要があります。
プロセスモデルが存在しない場合は、Runtime.exec() およびすべての java.lang.Process メソッドは SecurityException をスローする必要があります。
command
- 指定されたシステムコマンドenvp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持するdir
- サブプロセスが現在のプロセスの作業ディレクトリを継承する場合は、サブプロセスの作業ディレクトリ、または null
Process
オブジェクト
SecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合
IOException
- 入出力エラーが発生した場合
NullPointerException
- command
が null
の場合
IllegalArgumentException
- command
が空の場合exec(java.lang.String[], java.lang.String[], File)
,
SecurityManager.checkExec(java.lang.String)
public Process exec(String[] cmdarray) throws IOException
cmdarray
のトークンで指定されたコマンドは、独立したプロセスでコマンドとして実行されます。この機能は、exec(cmdarray, null)
とまったく同じです。
セキュリティーマネージャーが存在する場合、その checkExec
メソッドが、配列 cmdarray
の 1 番目の要素を引数として呼び出されます。これはセキュリティー例外となる場合があります。
プロセスモデルが存在する場合、Runtime.exec() は J2SE 仕様での動作と同じ動作を実行する必要があります。
プロセスモデルが存在しない場合は、Runtime.exec() およびすべての java.lang.Process メソッドは SecurityException をスローする必要があります。
cmdarray
- 実行するコマンドと引数を含む配列
Process
オブジェクト
SecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合
IOException
- 入出力エラーが発生した場合
NullPointerException
- cmdarray
が null
の場合
IndexOutOfBoundsException
- cmdarray
が長さが 0
の空の配列の場合exec(java.lang.String[], java.lang.String[])
,
SecurityManager.checkExec(java.lang.String)
public Process exec(String[] cmdarray, String[] envp) throws IOException
コマンド行のトークンを表す文字列の配列 cmdarray
、および環境変数の設定を表す文字列の配列 envp
を指定すると、このメソッドは指定されたコマンドを実行するための新しいプロセスを作成します。
envp が null の場合、サブプロセスは現在のプロセスの環境設定を継承します。
プロセスモデルが存在する場合、Runtime.exec() は J2SE 仕様での動作と同じ動作を実行する必要があります。
プロセスモデルが存在しない場合は、Runtime.exec() およびすべての java.lang.Process メソッドは SecurityException をスローする必要があります。
cmdarray
- 実行するコマンドと引数を含む配列envp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持する
Process
オブジェクト
SecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合
IOException
- 入出力エラーが発生した場合
NullPointerException
- cmdarray
が null
の場合
IndexOutOfBoundsException
- cmdarray
が長さが 0
の空の配列の場合Process
,
SecurityException
,
SecurityManager.checkExec(java.lang.String)
public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException
セキュリティーマネージャーが存在する場合、その checkExec
メソッドが、配列 cmdarray
の 1 番目の要素を引数として呼び出されます。これはセキュリティー例外となる場合があります。
コマンド行のトークンを表す文字列の配列 cmdarray
、および環境変数の設定を表す文字列の配列 envp
を指定すると、このメソッドは指定されたコマンドを実行するための新しいプロセスを作成します。
envp が null の場合、サブプロセスは現在のプロセスの環境設定を継承します。
新しいサブプロセスの作業ディレクトリは dir で指定します。dir が null の場合は、サブプロセスは現在のプロセスの現在の作業ディレクトリを継承します。
プロセスモデルが存在する場合、Runtime.exec() は J2SE 仕様での動作と同じ動作を実行する必要があります。
プロセスモデルが存在しない場合は、Runtime.exec() およびすべての java.lang.Process メソッドは SecurityException をスローする必要があります。
cmdarray
- 実行するコマンドと引数を含む配列envp
- 文字列の配列。配列の各要素は、name=value という形式で環境変数設定を保持するdir
- サブプロセスが現在のプロセスの作業ディレクトリを継承する場合は、サブプロセスの作業ディレクトリ、または null
Process
オブジェクト
SecurityException
- セキュリティーマネージャーが存在し、その checkExec
メソッドがサブプロセスの作成を許可しない場合
NullPointerException
- cmdarray
が null
の場合
IndexOutOfBoundsException
- cmdarray
が長さが 0
の空の配列の場合
IOException
- 入出力エラーが発生した場合Process
,
SecurityException
,
SecurityManager.checkExec(java.lang.String)
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
- ファイルが存在しない場合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
- ライブラリが存在しない場合SecurityException
,
SecurityManager.checkLink(java.lang.String)
|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。