問題タブ [invokedynamic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - Groovy パフォーマンスの最適化
Groovy コードのパフォーマンスの最適化に取り組んでいます。jvisualvm を使用して実行中のアプリケーションに接続し、CPU サンプルを収集しました。サンプルによると、org.codehaus.groovy.reflection.CachedMethod.inkoveが最も CPU 時間を消費します。サンプルに他の適用方法はありません。
CachedMethod.invokeを掘り下げて、どのコード行が実際にパフォーマンスのペナルティを与えるかを理解する正しい方法は何ですか?
ありがとう。
UPD : 私はIndyを使用していますが、役に立ちませんでした。
groovy を Java に書き換える前にボトルネックを見つけたいので、@CompileStaticを導入しようとしませんでした。
このスレッドに少し似た私の問題: Call site caching than invokedynamic?
Groovy スクリプトを動的に構成するコードがあります。スクリプト テンプレートは次のようになります。
%sが置き換えられた場所
データベースから取得した置換のセット (合計 20) があります。コードは DB から置換を取得し、GroovyScript を作成して評価します。ボトルネックはスクリプトの実行にあると思います。それを修正する正しい方法は何ですか?
java - Java バイトコード、Java サプライヤー、および invokedynamic 引数
私はこのクラスを持っていて、それをコンパイルします。
次に、そのバイトコードを調べようとすると、次のpublic static void main
関数の始まりが得られます。
ここで、invokedynamic 呼び出しを確認できます。正しく理解すれば、Supplier インターフェイスの匿名インスタンスを作成します。invokedynamic には 2 つの引数が渡され、そのうちの 1 つは #3 です。2 番目の引数は 0 です。最初の質問は、0 は何を表しているのでしょうか?
定数プールでは #3 は を表します#3 = InvokeDynamic #0:#27 // #0:get:()Ljava/util/function/Supplier;
。定数プールに #27 への参照がありますが、#0 への参照はありません。2 番目の質問は、#0 は何を表しているのでしょうか?
java - ASM は 'Type.INT_TYPE' を定数 Bootstrap メソッド引数として渡すことができません
invokedynamic
ASM を使用して命令を生成するための次のコードを考えてみましょう。
生成されたクラスをASMifierで逆コンパイルすると該当行が
ご覧のとおり、Type.INT_TYPE
は という名前の参照型へのリテラル参照に変わりましたI
。これが存在しないため、JVM は実行時にjava.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: I
.
私が代わりにやりたかったのは、 int.class
(Class
プリミティブ型のインスタンスint
、またはInteger.TYPE
定数の値)bootstrap
の引数としてメソッドに渡すことでしたsomeClass
。ただし、ASM はこれを適切に理解またはサポートしていないようです。
これは ASM のバグと見なすことができますか? また、回避策はありますか?
scala - Java8 と Scala2.12 ラムダ キャッシュに違いがあるのはなぜですか?
Java コード
スカラ コード (バージョン 2.12.0)
結果