Java 8 Nashornでサードパーティのコードを実行する必要があるシステムを構築しています。CPUとメモリの使用を監視/制御したいと考えています。私はJavascriptメソッドの前後にアドバイスを追加するByte Buddyエージェントを持っていますが、ループはバイトコードにコンパイルされているため、後ろに行くgotoバイトコードも増やす必要があります。それは現在サポートしているようなものではないようですが、それを実行する能力があると思います。それを使用するか、低レベルのASMコードを書いて自分でそれを行うべきですか?Byte Buddyの "goto"バイトコードにアドバイスを追加するにはどうすればよいですか?
答えて
私はバイトバディのデベロッパーと私は、メソッドのバイトコード操作のようなものをサポートする予定はありませんし、ここに理由は以下のとおりです。
メソッド内のバイトコードを操作するため、バイトバディは、その根底にあるASMを公開そのような詳細な編集を処理する最良の方法のような(私にとっては)APIです。 Advice
コンポーネントでは、空のオペランドスタックや、メソッドのパラメータ以外のローカル変数のオーバーライド可能なフレームなど、いくつかの前提があります。このため、Advice
コンポーネントがメソッドの前後ではなくメソッド内でトリガーされるようにするのは簡単です。
インプロセスメソッド呼び出しをディスパッチャー呼び出しで置き換えるためのいくつかのコンポーネントを追加することを検討しますが(Javassistsではメソッド内の置換が制限されています)、近い将来にはそうではありません。
ありがとうラファエル!エージェントを構築するときに、ASMにドロップしてクラスを修正するための低レベルのコードを書く最善の方法は何ですか?現在、私はアドバイスをインストールするためにこのようなことをしています: .transform(ビルダー、タイプ、クラスローダー) - > builder.visit(Advice.to(ResourceUsage.class) .on(ElementMatchers.nameStartsWith( ":") ))) –
ありがとうございます。それは今完璧に働いています。 Byte Buddyは素晴らしい図書館です! –
@Rafael:最後の段落は、 'invokedynamic'の自然な使用例のように聞こえます。 – Holger
- 1. Byte Buddyでインポートをどのように変更しますか?
- 2. byte-buddy throws java.lang.ClassNotFoundException:javax.servlet.http.HttpServlet
- 3. リスト[<Byte>]にバイト[]を追加するにはどうすればよいですか?
- 4. byte []をBitmapImageに変換するにはどうすればよいですか?
- 5. intをbyteに変換するにはどうすればよいですか?
- 6. byte []をBitmapに変換するにはどうすればよいですか?
- 7. Byte BuddyでinstanceFieldを設定する
- 8. Byte Buddyはメソッドのローカル変数名にアクセスできますか?
- 9. MethodDelegationまたはForwardingでByte Buddyプロキシを作成するには?
- 10. ImageViewをどうすればよいですか?relativeLayoutに追加
- 11. Rでは、テーブルオブジェクトに追加の列を追加するにはどうすればよいですか?
- 12. activity_main.xmlにコンポーネントを追加するにはどうすればよいですか?
- 13. RichTextBoxにタブコントロールを追加するにはどうすればよいですか?
- 14. JTableにチェックボックスを追加するにはどうすればよいですか?
- 15. xlsxwriterにリストを追加するにはどうすればよいですか?
- 16. ユーザーコントロールにページングを追加するにはどうすればよいですか?
- 17. ライブビデオストリーミングコードをグラファイトダッシュボードに追加するにはどうすればよいですか?
- 18. URLにパラメータを追加するにはどうすればよいですか?
- 19. データを列に追加するにはどうすればよいですか?
- 20. イメージアレイにチャネルを追加するにはどうすればよいですか?
- 21. テーブルセルにボーダーを追加するにはどうすればよいですか?
- 22. Redisにユーザーを追加するにはどうすればよいですか?
- 23. TWikiにカスタムマークアップを追加するにはどうすればよいですか?
- 24. ボトムシートビューに影を追加するにはどうすればよいですか?
- 25. NSOutlineViewDataSourceをNSOutlineViewに追加するにはどうすればよいですか?
- 26. QMenuBarにQProgressBarを追加するにはどうすればよいですか?
- 27. Phabricatorにグループレビューアを追加するにはどうすればよいですか?
- 28. リクエストにヘッダーフィールドを追加するにはどうすればよいですか?
- 29. NugetPackageにUserControlを追加するにはどうすればよいですか?
- 30. ナビゲーションバーにカートイメージを追加するにはどうすればよいですか?
これは、これがbyte-buddyの範囲内であるかどうかわかりません。さらに、すべての後方ブランチを計装することは、実際にあなたがコントロールしようとしているリソースオーバーヘッドを実際に作成するための良いレシピのように聞こえます。 – Holger
影響を制御することができるので、私は一定のオーバーヘッドに気をつけません。これは実際に制御されていないメモリとCPUの使用を止めることです。すべてが少し遅くなることは本当に大きな問題ではありません。 –