現在実行されているJVMを特定したいと思います。JVMTIドキュメントに記載されている関数を使用した最良のケースですが、何も見つかりません。
私が意味したのは、次のようなものですVirtualMachine.list()
。
[sun.tools.attach.WindowsAttachProvider@46ae506e: 2440 de.fu.profiler.view.MainFrame...
ただし、現在実行されているJVMではなく、すべてのJVMが表示されます。
現在実行されているJVMを特定したいと思います。JVMTIドキュメントに記載されている関数を使用した最良のケースですが、何も見つかりません。
私が意味したのは、次のようなものですVirtualMachine.list()
。
[sun.tools.attach.WindowsAttachProvider@46ae506e: 2440 de.fu.profiler.view.MainFrame...
ただし、現在実行されているJVMではなく、すべてのJVMが表示されます。
RuntimeMXBeanから一意の名前を取得できます。ほとんどのプラットフォームでは、これには現在のプロセスのプロセスIDが含まれます。
たとえば、Java システム プロパティを使用します。
java.runtime.name=Java(TM) 2 Runtime Environment, Standard Edition
java.runtime.version=1.5.0_01-b08
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.5
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.5.0_01
java.vm.info=mixed mode, sharing
java.vm.name=Java HotSpot(TM) Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=1.5.0_01-b08
java.lang.System.getProperties()
または_getProperty(String name)
jps (JDK にバンドルされているコマンド ライン ツール) は、現在実行中の Java プロセスを一覧表示します。
JMX を使用して、実行中のさまざまな Java プロセスを見つけてアタッチできます。
http://download.oracle.com/javase/1.5.0/docs/guide/management/agent.html
監視を有効にする必要があります。
現在の PID の検索は、オペレーティング システムに大きく依存します。これは、いくつかの提案を含むブログ投稿です。
http://blog.igorminar.com/2007/03/how-java-application-can-discover-its.html
詳細情報へのリンクは次のとおりです。
Java プログラムはどのようにして独自のプロセス ID を取得できますか? http://www.google.com/search?q=find+current+java+process+id
しますSystem.getProperty("java.runtime.name")
か?
JVM には、その呼び出しにリンクされた単一の識別クラスはありません。少なくとも、簡単に照会できるものはありません。
JVMTI を使用している場合は、接続先の JVM で実行されているスレッドを特定できます。JVM がグラフィカル インターフェイスを実行しているか、(たとえば) エンタープライズ コンテナーを実行しているかに応じて、1 つ以上のスレッドが存在する場合があります。特定のスレッドについて、スタックを調べて、現在呼び出されているメソッドを特定できます。スタックを反復処理すると、親クラスが JVM (例: java.lang. ) の一部であるか、アプリケーション固有のクラス (例: com.fun. ) であるかを判断できます。これにより、調査中の JVM の「ターゲット」を一意に識別することができます。