0

VirtualMachineVirtualMachine#loadAgentクラスがどこにもないことを除けば、正直なところ素晴らしいと思います。私もそれについてかなり混乱していますが、Attach API を持っていないようです。私はOpenJDK 8を使用しています:

$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b05)
OpenJDK 64-Bit Server VM (build 25.222-b05, mixed mode)

Java エージェントをロードするには、他にどのような方法がありますか? 私が取り組んでいる環境では-javaagent:、実行時にクラスパスに挿入されることを意図しているため、引数を渡すことにほとんど成功しません。明らかに、平均的なユーザーは、JVM引数を手動で変更することを望んでいない/知識を持っていません。私の特定のプログラムのために。

別の注意として、このクラスが OpenJDK の一部であることを意図していることを確認するために、Java ホットスポット VM 用にのみ設計されたものではないため、 http: //hg.openjdk.java.net/ から OpenJDK コードをダウンロードしました。、そしてVirtualMachine.javaファイルを見つけました。これは、間違いなく存在することを意味します

4

1 に答える 1

4

どこにもクラスVirtualMachine::loadAgentがないことを除けば、正直なところ素晴らしいと思います。VirtualMachine

VirtualMachineとのjavadocから始めましょうVirtualMachineDescriptor

明らかに、VirtualMachineクラスは Java クラス ライブラリによって定義されているため、クラスは存在します。したがって、問題は、コンパイル時および/または実行時にクラス自体を見つけることができない理由です。

Java 6 より前の古い JVM の場合、クラスは半内部的であり、ファイルVirtualMachineからアクセスする必要がありました。tools.jar

このVirtualMachineクラスが Java 6 で正式な API になったとき、その名前は に変更されましたcom.sun.tools.attach.VirtualMachine。ただし、それはまだtools.jarメイン ファイルではなくファイルにありrt.jarました。これは Java 8 まで (そしてそれを含めて) 続きました。

Java 9 では、モジュール システムが導入され、状況が変わりました。どちらでもないrt.jarか、tools.jarもう存在しません。これらのクラスに今すぐアクセスするには (Java 9 以降)、ファイルに含める必要がありrequires jdk.attachますmodule.info

于 2019-09-01T04:52:56.220 に答える