問題タブ [jvm-bytecode]
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 - ASM パラメータの番号付け
ダミークラスがあるとしましょう
asmifier はrun
メソッドに対して以下を作成します。
そして、私はこのビットを取得しません:
私の見方では、 には 3 つの引数しかありませんrun
。
では、なぜではなくf
を使用してロードされるようになったのでしょうか。3
2
java - Java 1.0.2 のインターフェース Member に ACC_ABSTRACT が設定されていないのはなぜですか?
いくつかの実験を行うために単純な Java バイトコード パーサーを作成しましたが、最近、予期しない場所で失敗しました。java/lang/reflect/Member.java
Java 1.1.8.16 から読み取っているときrt.jar
に、私のパーサーは次のように開始されるため、おかしくなりました (フラグMember
が欠落していることに注意してください)。ACC_ABSTRACT
Java 1.2.2.17 のバージョンではこれが修正され、フラグが0x0601
( ACC_ABSTRACT | ACC_INTERFACE | ACC_PUBLIC
) に設定されています。
私が見つけた最も初期の JVM 仕様 (1.0.2 とされている) には、次のように書かれています (§4.1、p. 86、強調を追加)。
インターフェイスは暗黙のうちに抽象的です (§2.13.1)。その
ACC_ABSTRACT
フラグを設定する必要があります。インターフェイスを final にすることはできません。もしそうなら、その実装は決して完了できません (§2.13.1) ので、そのフラグをACC_FINAL
設定することはできませんでした。
JVM 仕様のバージョン 9 には、次のような言葉があります。
ACC_INTERFACE
フラグが設定されている場合は、ACC_ABSTRACT
フラグも設定する必要があり、ACC_FINAL
、ACC_SUPER
、ACC_ENUM
、およびACC_MODULE
フラグ セットを設定してはなりません。
Oracle/Sun JVM は、「そうでなければならない」というこの要件を強制しますか? もしそうなら、いつからですか?そうでない場合、なぜ JVM 仕様はわざわざそれが必要であるかのように振る舞うのでしょうか?