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)
filename引数によって指定されたネイティブ・ライブラリをロードします。
|
void |
loadLibrary(String libname)
引数
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");
)。filename引数(プラットフォーム固有のライブラリ接頭辞、パス、およびファイル拡張子がすべて取り除かれている場合)が、たとえばLという名前のライブラリを示し、Lというネイティブ・ライブラリがVMと静的にリンクされている場合は、ダイナミック・ライブラリのロードを試みるのではなく、そのライブラリによってエクスポートされるJNI_OnLoad_L関数が呼び出されます。その引数と一致するファイル名がファイル・システム内に存在する必要はありません。詳細は、「JNI仕様」を参照してください。それ以外の場合、filename引数は実装に依存した方法でネイティブ・ライブラリ・イメージにマップされます。
まず、セキュリティ・マネージャが存在する場合は、checkLink
メソッドがfilename
をその引数に指定して呼び出されます。これはセキュリティ例外となる場合があります。
これはloadLibrary(String)
メソッドと似ていますが、ライブラリ名ではなく一般的なファイル名を引数として指定できるため、ネイティブ・コードで書かれた任意のファイルがロード可能になります。
このメソッドを呼び出すには、System.load(String)
メソッドが一般的で便利です。
filename
- ロードするファイル。SecurityException
- セキュリティ・マネージャが存在し、そのcheckLink
メソッドが、指定されたダイナミック・ライブラリのロードを許可しない場合UnsatisfiedLinkError
- filenameが絶対パス名でない場合、ネイティブ・ライブラリがVMと静的にリンクされていない場合、またはホスト・システムがそのライブラリをネイティブ・ライブラリ・イメージにマップできない場合。NullPointerException
- filename
がnull
である場合getRuntime()
、SecurityException
, SecurityManager.checkLink(java.lang.String)
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
- 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, 2014, Oracle and/or its affiliates. All rights reserved.