モジュール jdk.attach
パッケージ com.sun.tools.attach

クラスVirtualMachine

java.lang.Object
com.sun.tools.attach.VirtualMachine

public abstract class VirtualMachine extends Object
Java仮想マシンです。

VirtualMachineは、このJava仮想マシンの接続先のJava仮想マシンを表します。 接続先のJava仮想マシンは、ターゲット仮想マシンまたはターゲットVMとも呼ばれます。 アプリケーションは、通常は管理コンソールやプロファイラのようなツールであり、VirtualMachineを使用してターゲットVM内にエージェントをロードします。 たとえば、Java言語で作成されたプロファイル・ツールで、実行中のアプリケーションに接続し、そのプロファイラ・エージェントをロードして実行中のアプリケーションのプロファイルを作成することもできます。

VirtualMachineを取得するには、ターゲット仮想マシンを識別する識別子を付けてattachメソッドを呼び出します。 識別子は実装によって異なりますが、通常、各Java仮想マシンがそれぞれ独自のオペレーティング・システム・プロセスで実行される環境ではプロセス識別子(pid)になります。 別の方法として、VirtualMachineインスタンスは、listメソッドによって返される仮想マシン記述子のリストから取得されるVirtualMachineDescriptorで、attachメソッドを呼び出すことでも取得されます。 仮想マシンへの参照を取得すると、loadAgentloadAgentLibrary、およびloadAgentPathの各メソッドを使用して、ターゲット仮想マシン内にエージェントをロードします。 loadAgentメソッドは、Java言語で作成されJAR fileに配置されているエージェントをロードするのに使用します。 (これらのエージェントのロードおよび起動方法の詳細は、java.lang.instrumentを参照してください)。 loadAgentLibraryおよびloadAgentPathメソッドは、ダイナミック・ライブラリに配置されるか、または静的にVMにリンクされ、JVM Tools Interfaceを利用するエージェントのロードに使用します。

エージェントのロードのほか、VirtualMachineはターゲットVM内のsystem propertiesへの読取りアクセスも提供します。 これは、ターゲットVM内にロードされるエージェントへのパスを構築するために、java.homeos.nameos.archなどのプロパティを使用する環境で有用です。

次にVirtualMachineの使用方法の例を示します。


      // attach to target VM
      VirtualMachine vm = VirtualMachine.attach("2177");

      // start management agent
      Properties props = new Properties();
      props.put("com.sun.management.jmxremote.port", "5000");
      vm.startManagementAgent(props);

      // detach
      vm.detach();

 

この例では、プロセス識別子2177で識別されるJava仮想マシンに接続します。 次に、入力した引数を使用してターゲット・プロセスでJMX管理エージェントが起動されます。 最後にクライアントがターゲットVMから切り離されます。

VirtualMachineは、複数の並行スレッドで安全に使用できます。

導入されたバージョン:
1.6