問題タブ [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.

0 投票する
4 に答える
13319 参照

performance - Scala のパターン マッチングはバイトコード レベルでどのように実装されていますか?

Scala のパターン マッチングはバイトコード レベルでどのように実装されていますか?

それは一連のif (x instanceof Foo)構造のようなものですか、それとも何か他のものですか? そのパフォーマンスへの影響は何ですか?

たとえば、次のコード ( Scala By Exampleページ 46 ~ 48 から) が与えられた場合、evalメソッドの同等の Java コードはどのようになりますか?

PS私はJavaバイトコードを読むことができるので、バイトコード表現で十分ですが、おそらく他の読者にとってはJavaコードとしてどのように見えるかを知っている方が良いでしょう.

PPS 本Programming in Scalaは、Scala がどのように実装されているかについて、これと同様の質問に答えていますか? 本を注文しましたが、まだ届きません。

0 投票する
2 に答える
4968 参照

java - JVM でバイトコードはどのように検証されますか?

JVM でバイトコードはどのように検証されますか?

0 投票する
4 に答える
529 参照

java - Java コンパイラによって生成されたバイトコードを見る必要がありますか?

No

  • とにかく、JITコンパイラはバイトコードをまったく異なるものに「変換」する可能性があります。
  • 時期尚早の最適化を行うことになります。

Yes

  • どのメソッドが JIT でコンパイルされるかわからないので、すべて最適化した方がよいでしょう。
  • それはあなたをより良い Java プログラマーにします。

(明らかに)よくわからないまま質問しているので、JITハイパーリンクにリダイレクトしてください。

0 投票する
7 に答える
1521 参照

python - 関数出力がPythonの変数に割り当てられているかどうかを確認する方法はありますか?

Python では、それ自体が呼び出された場合に結果をコンソールにきれいに出力する関数を書きたいと思います (ほとんどの場合、対話型またはデバッグ用)。この質問の目的のために、何かのステータスをチェックするとしましょう。私がちょうど呼び出す場合

私は次のようなものを見たいです:

ただし、変数割り当てのコンテキストで呼び出す場合は、出力をリストとして渡すことも必要です。

それで...関数内で、その出力が割り当てられているかどうかを動的に知る方法はありますか? パラメータの受け渡しに頼ったり、専用の別の関数を作成したりせずに、これを実行できるようにしたいと考えています。私は少しグーグルで調べましたが、バイトコードで遊ぶことに頼らなければならないように見えることはほとんどありません。それは本当に必要ですか?

0 投票する
2 に答える
1040 参照

c# - C# を使用して PHP スクリプトを OpCode に変換する最も簡単な方法は?

C#を使用してPHPスクリプト(.php)をOpCode/Bytecode(オペレーションコード)に変換する最も簡単な方法は何ですか? 必要に応じて DLL を使用できます。

PHPコードを簡単に分析するために、私が取り組んでいるプロジェクトでこれを行う必要があります。

どんな考えやアイデアでも大歓迎です。

0 投票する
4 に答える
1608 参照

compiler-construction - バイトコード解析命令と機械語の違いは?

「バイトコード プログラムは通常、一度に 1 つずつ命令を解析することによって実行されます。この種のバイトコード インタープリターは非常に移植性があります。動的トランスレーターまたは「ジャストインタイム」(JIT) コンパイラーと呼ばれる一部のシステムは、バイトコードを機械語に変換します。実行時に必要に応じて: これにより、仮想マシンは移植できなくなります。」

この段落に関する質問は次のとおりです。バイトコードが処理された後、解析された命令と機械語 (または機械コード) の違いは何ですか?

0 投票する
6 に答える
4466 参照

python - なぜPythonは解釈する前にソースをバイトコードにコンパイルするのですか?

なぜPythonは解釈する前にソースをバイトコードにコンパイルするのですか?

ソースから直接解釈してみませんか?

0 投票する
5 に答える
247 参照

bytecode - 解釈された言語のコードは、行に到達するたびに再解釈されますか?

Ruby、Perl、PHPのように、プログラムに対してバイトコードが生成されないとします。この場合、実行が1行目に達するたびに、以下の1行目が再解釈されますか?

つまり、ループが100,000回実行された場合、その行は100,000回再解釈されますか?

もしそうなら、バイトコードの作成は、プログラムの最初の起動だけでなく、実行中も役立ちますか?(コードを再度解釈する必要がないため)

0 投票する
7 に答える
1839 参照

java - 役に立たないgotoを削除するJavaバイトコードオプティマイザーはありますか?

問題:8000バイトを超えるJavaバイトコードにコンパイルするメソッドがあります。HotSpotには、8000バイトを超えるメソッドに対してJITが起動しないようにする魔法の制限があります。(はい、巨大なメソッドを持つことは合理的です。これはトークナイザーループです。)メソッドはライブラリ内にあり、ライブラリのユーザーが魔法の制限を無効にするようにHotSpotを構成する必要はありません。

観察:バイトコードを逆コンパイルすると、EclipseJavaコンパイラが多くの無意味なgotoを生成することがわかります。(javacはさらに悪いです。)つまり、ジャンプからのみ到達可能なgotoがあります。明らかに、後藤にジャンプするジャンプは、代わりに後藤がジャンプする場所に直接ジャンプする必要があり、後藤は削除する必要があります。

質問:無意味なジャンプチェーンをフラット化して不要なgotoを削除するJava 5クラスファイル用のバイトコードオプティマイザーはありますか?

編集:私は次のようなパターンを意味します:

明らかに、2番目のgotoに到達するには、8701にジャンプする必要があります。これは、0に直接ジャンプする場合もあります。

2回目の調査では、この疑わしいパターンがより一般的です。

明らかに、コンパイラーが「等しくない」比較を「等しい」比較に逆にし、8704にジャンプして、gotoを削除するようにしたい場合。