インターセプターを使用して、Bean のパブリック メソッド呼び出しの実行時間を測定します。それにもかかわらず、Bean のメソッドが他のプライベート メソッドを呼び出すと、監査インターセプターを無視するように見えます。
プライベート メソッドの実行時間もどのように測定できますか?
インターセプターを使用して、Bean のパブリック メソッド呼び出しの実行時間を測定します。それにもかかわらず、Bean のメソッドが他のプライベート メソッドを呼び出すと、監査インターセプターを無視するように見えます。
プライベート メソッドの実行時間もどのように測定できますか?
AspectJのようなアスペクト指向プログラミングライブラリを使用して、ベンチマークを実装できます。
たとえば、次を参照してください。
実際、これは一部のプロファイラーが行うことです。
JVMTI APIを使用して(正直に言うと、これがうまくいくかどうかは完全にはわかりません)、独自のコードインスペクターを実装し、JVMに直接接続することができます。
プライベートメソッドがコンパイル時または実行時にインライン化される可能性があるという彼の回答におけるjbの(有効な)懸念に関して、一部のJVMはそれを行わないか、この機能を無効にすることを許可する場合があります。
-XnoOpt
最適化を無効にするオプションがあります(この特定のものを含む)。-XX:-Inline
(まだ存在しているか、何かを実行しているかどうかはわかりません)。ただし、これは、インライン化がアクティブ化されたときに本番環境で得られるものを正確に測定しないことを意味します。それでも、おそらくコードを検査するのに便利です。
インターセプターは、インターフェイス メソッドの呼び出し時に EJB コンテナーによって適用されます。プライベート メソッドは、EJB コンテナーからは見えません。代わりにプロファイリング ツールを使用するのはどうですか?
私の知る限り、プライベート メソッドは JVM レジャーで (コンパイル時でも) インライン化できるため、バイトコードに存在しない可能性があるため、プロファイリングできません。
メソッドにマークを付けることができると思いますprotected
---そうすれば、本番環境でもインライン化されず、プロファイリングできます。
テスト インスタンスのプロファイルを作成する場合は、visualvm を試すことができます --- visualvm は非常に優れた代替手段です。VisualVM は、必要なすべての計測を行う JVM インスタンスをプロファイリングするためのグラフィカル ツールです。http://visualvm.java.net/。さらに、ほとんどの jdk ディストリビューションの標準ツールです。