6

ObjectUtilsすべてのオブジェクトのさまざまなユーティリティ メソッドを含む単純なクラスを作成しようとしています。インスタンス化されたオブジェクトを渡す場所でそれらの1つを呼び出しgetObjectSize(Object)、メモリ内のオブジェクトのサイズを返したいと思います:

public class ObjectUtils {
    private static volatile Instrumentation instrumentation;

    public static final long getObjectSize(final Object p_oToGauge)
    {
        return instrumentation.getObjectSize(p_oToGauge);
    }
}

ただし、実装されたInstrumentationインスタンスを取得するには、JRE エージェントといわゆるpremainメソッドを使用して、さまざまな手の込んだことを行う必要があるようです。

ローカル JRE のInstrumentationインスタンスにアクセスする簡単な方法はありますか? RuntimeAPIで何かを探しましたが、何も見つかりませんでした。

4

1 に答える 1

2

というクラスを見つけましたInstrumentationFactory

誰かが のインスタンスを初めて要求するとInstrumentation、エージェント JAR ファイルが作成され、それから自身のプロセスの PID が検索され、その中の JVM にアタッチされます...これがその を呼び出し、対象のインスタンスをagentmain(..)与えます。Instrumentation

そのアプローチがどれほど信頼できるかはわかりません。次に試したいのは、OpenJDK のコードを検索して、Instrumentationインスタンスが作成される場所と方法を確認することです。おそらく、セキュリティ要件がない場合、(リフレクションを介して) そのメカニズムを取得してInstrumentation、エージェントをアタッチまたはプリロードすることなくインスタンスを提供することは可能でしょうか?

于 2016-08-28T09:16:13.923 に答える