JavaバイトコードとJVMについて学ぶ
-
05-07-2019 - |
質問
最近の質問で、私の単純な答えは、Java、JVM、およびコードがどのようにコンパイルされ実行されるかについての私の誤解の多くを強調しました。これは、私の理解をより低いレベルに持って行きたいという私への願望を生み出しました。バイトコードとJVMが私を混乱させるまで、アセンブリのような低レベルの理解に問題はありません。オブジェクト指向コードが低レベルでどのように分解されるかは、私にとっては失われます。 JVM、バイトコード、およびJavaの低レベルの機能について学習する方法について何か提案があるのではないかと思いました。バイトコードを直接記述して実行できるユーティリティはありますか?何かを実際に体験することが、それを理解するための最良の方法だと思いますか?さらに、このトピックに関する提案を読んでいただければ幸いです。
編集:二次質問。だから私はちょっとした質問があり、答えはjvmについて学ぶための興味深いアイデアを与えてくれました最終的にooをサポートするために)それはバイトコードにコンパイルされますか?それは良い学習経験でしょうか?
他のヒント
Apache BCEL を使用すると、バイトコードから.classファイルを分析および作成できます。
javap を使用すると、逆アセンブルできます既存の.classファイル。これは、カバーの下で実際に何が起こっているかを理解するために、クイックテストクラスをノックアップするのに特に役立ちます。
ASMチュートリアルで、ライブラリ自体をいじっています。
私見、ASMはBECLよりも優れています。
BCELはすでに使用されています いくつかのプロジェクトなどで成功しました コンパイラ、オプティマイザ、 難読化ツール、コードジェネレーター、 分析ツール。 残念ながらそこに あまり開発されていません 過去数年間で。お気軽に 手伝うか、 でASMプロジェクトを調べる objectweb。 - http://jakarta.apache.org/bcel/
JVMを理解するための信頼できるソースは1つだけです
Java®仮想マシン仕様Java SE 7 Edition
http://docs.oracle.com/javase/ specs / jvms / se7 / html / index.html
Java仮想マシンのプログラミングは、このトピックに適した本です。 (開示:著者と協力しています。)
Java / JVMのアーキテクチャを理解するには、Wikipedia、仕様、およびソースコードを読んでください。
低レベルでオブジェクト指向コードがどのように行われるかを理解するには、Cなどの低レベル言語で継承/ポリモーフィズム/カプセル化などの機能を試し、エミュレートします。
Cでは、たとえば、関数ポインターとネストされた構造の組み合わせによって上記を実現できます。