ByteBuddy でプロファイラーを実装しようとしています。私は現在、プロファイリングしているメソッドの適切な署名を効率的に作成することに苦労しています。
これが私の現在の実装の要点です: https://gist.github.com/felixbarny/e0c64819c59368a28200
ProfilingInterceptor.profile メソッドには 2 つの実装があります。それぞれに独自の欠陥があります。
最初のものは@Origin String signature
署名として使用します。ByteBuddy がそれをキャッシュしているように見えるので、これは非常に効率的です。問題は、署名の形式に満足できないことです。たとえばmethod2(I)I
。
@Origin(cacheMethod = true) Method method
2 番目の実装では、見栄えの良い署名を注入して手動で構築していますint org.stagemonitor.benchmark.profiler.ClassJavassistProfiled.method2(int)
。明らかな問題は、すべての呼び出しで署名が再作成されることです-パフォーマンスが向上しません(私のjmhベンチマークは、4倍遅いと言っています)。
たとえば、署名ごとに文字列定数を作成することにより、署名をキャッシュする方法はありますか?
前もって感謝します