問題タブ [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.
java - JSR-292(invokedynamic)はGroovyのパフォーマンスにどの程度影響しますか?
JSR-292がGroovyのパフォーマンスにどの程度影響するかを示す見積もりはありますか?
java - 標準のJDKでinvokedynamicが利用できるようになるのはいつですか。
私はJavaの上で動的言語を使い始めたいと思っています。
これが標準のJDKの一部になるまでどのくらいかかりますか?
clojure - Clojure JVM 7/8 の改善
Rich Hickey らは、Clojure がinvokeDynamic
JVM 7 または 8 で予定されている次のバージョンから大幅に改善されることはないと述べていますが、末尾再帰によるパフォーマンスの向上は見られるでしょう。
末尾再帰は影響しますか
また
コンパイラはおそらくすでにループ構造を生成しているので、これ以上速くなるとは思いません。
java - invokedynamic とは何ですか? また、どのように使用しますか?
JVM に追加されたクールな新機能についてよく耳にしますが、それらのクールな機能の 1 つが invokedynamic です。Java でのリフレクション プログラミングがどのように簡単または改善されるのかを知りたいです。
java-7 - JDK7 のソースコードからの InvokeDynamic
JDK 7 のプレリリース バージョンには、ソース コードから invokedynamic 命令を作成できるクラス java.dyn.InvokeDynamic が含まれていました。
ここを参照してください: http://fwierzbicki.blogspot.com/2009/08/invokedynamic-and-jython-part-i.html
公式の JDK 7 リリースでは、このクラスはなくなったようです。このソース コード オプションがまだサポートされているかどうかは誰にもわかりませんか?
java - invokedynamic メソッドと暗黙メソッド
JDK 7 の新しい invokedynamic バイトコード命令に関するこの投稿を読んで理解したように、オブジェクトのクラスで静的に定義されていないオブジェクトのメソッドを呼び出し、それらのメソッド呼び出しをいくつかの具体的な静的メソッドに解決することが可能になります。メソッド呼び出しのターゲット解決をインターセプトすることにより、他のクラス(投稿に例が示されています)。
これは、Java 7 クラスが Scala のような暗黙のメソッドを持つことができるということですか? そうでない場合、Scala での暗黙的なメソッドの解決は、invokedynamic メソッドの解決とどのように異なるのでしょうか?
java - InvokeDynamic - ブートストラップ メソッドで引数にアクセスする方法は?
invokedynamic
JVM7で「ダックタイピング」を実装しようとしています。2 つの異なるクラスを作成しましたが、どちらもgreet()
を返すメソッドを持っていますString
。そのうちの 1 つをランダムに選択し、インスタンスをスタックに格納してinvokedynamic
(ASM を使用して) 呼び出します。
ブートストラップメソッドで引数にアクセスできるのだろうか。どのオブジェクトがスタック上にあり、どのメソッドを返す必要があるかを知らずに適切CallSite
に返すことができないためです。target
greet()
私のアプローチが間違っている場合、正しいアプローチは何ですか?
java - MethodHandle の例は、invokeExact 呼び出しで WrongMethodTypeException をスローします
クラスの説明に示されている例では、次の説明を持つステートメントの呼び出しでMethodHandle
a がスローされます。WrongMethodTypeException
mh.invokeExact("daddy",'d','n')
(CC)Ljava/lang/String; cannot be called with a different arity as ([Ljava/lang/Object;)Ljava/lang/Object;
MethodHandle
オブジェクトには、以下mh
に対応するシンボリック型記述子があります(CC)Ljava/lang/String
。しかし、 を呼び出しているときmh.invokeExact("daddy",'d','n')
、引数:d
とn
が配列として渡されObject
、タイプ の引数と一致しませんchar
。
またはのinvokeWithArguments
代わりに を使用して上記の問題を解決できることはわかっていますが、この例はJava 7 APIの説明に示されているように機能するはずでした。それに加えて、 には/に関連するパフォーマンス オーバーヘッドがあります。invokeExcat
invoke
MethodHandle
invokeWithArguments
invoke
invokeExact
java - MethodHandle - それは何ですか?
私は JDK 1.7 の新機能を研究していますが、MethodHandle が何のために設計されているのかわかりません。静的メソッドの (直接的な) 呼び出し (およびこの場合は簡単な Core Reflection API の使用) を理解しています。仮想メソッド(非静的、非最終)の(直接)呼び出し(およびクラスの階層を通過する必要があるコアリフレクションAPIの使用)も理解していますobj.getClass().getSuperclass()
。非仮想メソッドの呼び出しは、前者の特殊なケースとして扱うことができます。
はい、オーバーロードに問題があることは承知しています。メソッドを呼び出したい場合は、正確な署名を提供する必要があります。オーバーロードされたメソッドを簡単にチェックすることはできません。
しかし、MethodHandle とは何ですか? リフレクション API を使用すると、(インターフェイスの実装など) 前提条件なしでオブジェクトの内部を「調べる」ことができます。何らかの目的でオブジェクトを検査できます。しかし、MethodHandle も設計されているのは何ですか? なぜ、いつ使用する必要がありますか?
更新:私は今、このhttp://blog.headius.com/2008/09/first-taste-of-invokedynamic.htmlの記事を読んでいます。それによると、主な目標は Java 言語自体ではなく、JVM 上で実行されるスクリプト言語の生活を簡素化することです。
更新-2:上記のリンクを読み終えました。そこからの引用:
JVM は動的言語の VM であるため、動的言語の構築に最適な VM になります。InvokeDynamic は、動的言語を第一級の JVM 市民に推進することで、それを証明します。
リフレクションを使用してメソッドを呼び出すと、うまく機能します...いくつかの問題を除いて。メソッド オブジェクトは特定の型から取得する必要があり、一般的な方法では作成できません。<...>
...反映された呼び出しは、直接呼び出しよりもはるかに遅くなります。何年にもわたって、JVM は反映された呼び出しを高速化することに非常に長けてきました。最新の JVM は実際には、バックグラウンドで一連のコードを生成して、古い JVM で処理されていたオーバーヘッドの多くを回避しています。しかし、単純な真実は、完全に生成された「invoke」メソッドがレシーバーの型、引数の型、可視性、およびその他の詳細をチェックおよび再チェックする必要があるため、任意の数のレイヤーを介したリフレクト アクセスは常に直接呼び出しよりも遅くなるということですが、また、引数はすべてオブジェクトでなければならず (プリミティブはオブジェクトボックス化されるため)、すべての可能なアリティをカバーする配列として提供される必要があるため (引数は配列ボックス化されるため)。
いくつかのリフレクト呼び出しを行うライブラリでは、パフォーマンスの違いは問題にならない可能性があります。特に、それらの呼び出しが、通常の呼び出しを行うことができるメモリ内の静的構造を動的に設定するためのものである場合は特にそうです。しかし、すべての呼び出しでこれらのメカニズムを使用する必要がある動的言語では、パフォーマンスが大幅に低下します。
http://blog.headius.com/2008/09/first-taste-of-invokedynamic.html
したがって、Java プログラマーにとっては、基本的に役に立ちません。私は正しいですか?この観点からは、Core Reflection API の代替手段としか考えられません。
UPDATE-2020:確かに、MethodHandle は Core Reflection API のより強力な代替手段と考えることができます。JDK 8 以降では、それを使用する Java 言語機能もあります。
java - invokedynamic とアプリケーション開発者にとっての利点
最近、私は Java 7 の機能について読んでいましたが、invokedynamic は最も期待されていた機能の 1 つでした。ほとんどのブログ/記事は、特に動的型付け言語について、JVM 実装の観点から利点を提供しています。アプリケーション開発者の観点から、それは私にどのような影響を与えますか?