2012-05-21 7 views
6

すべてのオブジェクトに対してさまざまなユーティリティメソッドを含む単純にObjectUtilsクラスを作成しようとしています。私はあなたがそれをインスタンス化されたオブジェクトを渡すと、それはメモリ内のオブジェクトのサイズを返すところそのうちの一つがgetObjectSize(Object)と呼ばれる持っていると思います:JavaでInstrumentationのインスタンスを取得する方法

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インスタンスに簡単にアクセスできますか?私はRuntime APIを通して何かを探しましたが、何も見つかりませんでした。

+2

I _think_はありません。あなたはすてきなことをしなければならないでしょう。 –

+0

私はAlex Snapsからこの記事を掘り出したことがあります。http://www.codespot.net/blog/2012/01/measuring-java-object-sizes/ –

答えて

0

InstrumentationFactoryというクラスが見つかりました。

誰かがInstrumentationのインスタンスを要求する最初の時間は、それはそれ自身のプロセスのPIDを見つけて、その内部のJVMにそれを添付し...そのagentmain(..)を呼び出す、それをInstrumentationを与え、その後、エージェントのJARファイルを作成します興味のあるインスタンス。

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

関連する問題