問題タブ [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.
jvm - 通話中に JVM PC はどこに保存されますか?
現在、JVM の最新の仕様を読んでいます。各スレッドが独自の呼び出しスタックと、実行する (次の) 命令を追跡する独自のプログラム カウンターを持っていることは明らかです。私の質問はおそらくダンプですが、説明からは答えが見つかりません。
new
またはメソッドが呼び出されると、現在のプログラム カウンターはどこに格納されますか? 言い換えれば、スレッドはメソッドの呼び出し後にどのように続行するのでしょうか?
java - AspectJ が空の注釈チェックを生成するのはなぜですか?
私は AspectJ 1.8.8 コンパイル時ウィービングを使用しており、このようなブロックがあります
where@SomeAnnotation
は「Around」アドバイスで実装されます。
JD-GUI でバイトコードを見ると、次の生成されたコードが表示されます (わずかにフォーマットされています)。
何もしていないように見えるのに、なぜその条件 ( if (tmp56_53...)
) が存在するのか疑問に思っていました (また、構文的に正しくない Java ですか? これは ajc によって生成されたためでしょうか?)。カバレッジ ツール (JaCoCo) で「分岐ミス」が発生しているため、これについては興味があります。
編集 1
以下は、javap からの生の Java マシン コードです。
問題の条件付きのように見えifnonnull
ますが、私は JVM 命令にまったく慣れていません。なぜ AspectJ がこのようなロジックを生成するのか、まだわかりません。