39

最近の質問で、私の素朴な答えは、Java、JVM、およびコードがどのようにコンパイルされて実行されるかについての私の誤解の多くを浮き彫りにしました。これにより、自分の理解をより低いレベルに引き上げたいという欲求が生まれました。アセンブリのような低レベルの理解に問題はありませんが、バイトコードと JVM が私を混乱させました。オブジェクト指向コードが低レベルでどのように分解されるかは、私にはわかりません。JVM、バイトコード、および Java の下位レベルの機能について学ぶ方法について誰か提案があるかどうか疑問に思っていました。バイトコードを直接記述して実行できるユーティリティはありますか?何かを実際に体験することが、理解を深めるための最良の方法であると私は信じています。さらに、このトピックに関する提案を読んでいただければ幸いです。

編集:二次的な質問。だから私はちょっとサブの質問があります.答えは私にjvmについて学ぶための興味深いアイデアを与えてくれました.brainf ** kやOokのような本当に単純な言語を読みやすい構文だけで書くことの妥当性は何でしょうか.最終的に oo をサポートするには)、それはバイトコードにコンパイルされますか? それは良い学習経験になるでしょうか?

4

6 に答える 6

31

推奨される読書: JVM 仕様

BCELで遊んでみることもできます。バイトコードを操作するためのライブラリは他にもありますが、おそらく最もよく知られているライブラリです。

于 2009-07-30T14:53:30.580 に答える
13

Apache BCELを使用すると、バイトコードから .class ファイルを分析して手作りすることができます。

javapを使用すると、既存の .class ファイルを逆アセンブルできます。カバーの下で実際に何が起こっているかを理解するために、クイックテストクラスをノックアップするのに特に役立ちます。

于 2009-07-30T14:53:41.173 に答える
5

ASMチュートリアルを読み、ライブラリ自体をいじくり回して学びました。

私見、ASMはBECLよりも優れています。

BCELは、コンパイラー、オプティマイザー、オブスフューケーター、コードジェネレーター、分析ツールなどのいくつかのプロジェクトですでに正常に使用されています。残念ながら、ここ数年はあまり開発が進んでいません。お気軽にご協力ください。または、objectwebでASMプロジェクトを確認することをお勧めします。 -http ://jakarta.apache.org/bcel/

于 2009-07-30T15:44:55.923 に答える
3

JVM を理解するための信頼できる情報源は 1 つだけです

Java® 仮想マシン仕様 Java SE 7 Edition

http://docs.oracle.com/javase/specs/jvms/se7/html/index.html

于 2014-01-22T10:07:13.807 に答える
2

Java仮想マシンのプログラミングは、このトピックに適した本です。(開示:私は著者と協力しています。)

于 2009-07-30T15:27:01.070 に答える
1

Java/JVM のアーキテクチャを理解するには、ウィキペディア、仕様、およびソース コードを参照してください。

オブジェクト指向コードが低レベルでどのように行われるかを理解するには、C などの低レベル言語で継承/ポリモーフィズム/カプセル化などの機能を試してエミュレートしてください。

C では、たとえば、関数ポインターとネストされた構造の組み合わせによって、上記を実現できます。

于 2009-07-30T14:55:49.390 に答える