2009-07-30 18 views
28

最近の質問で、私の簡単な答えは、Java、JVM、そしてコードがどのようにコンパイルされて実行されるかについての私の誤解の多くを強調しました。これは、私の理解をより低いレベルに引き上げたいという希望を私にもたらしました。アセンブリのような低レベルの理解には問題がありません。バイトコードとJVMがどうやって私を混乱させるのか。どのようにオブジェクト指向のコードが低レベルで分解されるかは私には分かりません。 JVM、バイトコード、Javaの低レベル機能について学ぶ方法について誰かが提案しているのかどうか疑問に思っていました。私が何かを経験した経験が、その理解を深める最善の方法だと思うように、バイトコードを直接記述して実行できるユーティリティはありますか?さらに、このトピックに関する提案を読んでいただければ幸いです。JavaバイトコードとJVMについて学ぶ

編集:副次的な質問。だから私はちょっとした質問があります、答えは私にjvmについて学ぶ面白いアイデアを与えました。脳のような本当に単純な言葉を書くことの妥当性は、読みやすい構文でしかありません。最終的にはバイトコードにコンパイルすることができますか?それは良い学習経験ですか?

+2

1 ** kは理解JVMのための唯一の信頼できる情報源があります属性「シンプル」;-) –

+0

私は、「シンプル」は、使いやすさではなく、複雑さが小さいという意味で使われていたと思います。) – SasQ

答えて

29

参考資料:the JVM spec

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

+0

私はそのような仕様が存在していたとしても知らなかった。それは本当に役立ちます。 –

11

Apache BCELは、バイトコードからクラフトクラッシュファイルを分析して手渡すことができます。

javapを使用すると、既存の.classファイルを逆アセンブルできます。クイックテストクラスをノックして、実際に何がカバーの下にあるのかを理解するのに特に便利です。

1

Java/JVMのアーキテクチャを理解するには、Wikipedia、仕様、およびソースコードを読んでください。オブジェクト指向のコードは低レベルでどのように行われるかを理解するための

:試してみて、あなたはを通して上記目的を達成することができますCではC.

などの低レベル言語で継承/ポリモーフィズム/カプセル化などの機能をエミュレートし、たとえば、関数ポインタとネストされた構造体の組み合わせです。

+0

私はこの第2の提案が本当に好きです。私はそれを行うためのエレガントな方法を考案しなければならないかもしれないと思う。私は、多形性と継承のために本当に複雑なものをいくつか知っていますが、それらは本当に非効率的なテクニックであり、おそらく機能をエミュレートするものではないでしょう。 –

+0

C言語でこれを行う方法についての詳細を追加しました。実際には、言語をよく理解しポインタがどのように機能するかは難しくありません。 –

+0

@MikeMcQuaid:Cでクロージャを実装するのはどうですか? – SasQ

3

the ASM tutorialを読んで学び、図書館そのものについて学んだことがあります。

IMHO、ASMはBECLより優れています。

BCELは既に 例えばコンパイラ、オプティマイザ、 obsfuscators、コードジェネレータと 分析ツールとして、いくつかのプロジェクトで正常 に使用されています。 残念ながら、 は、過去数年間に に進んでいませんでした。。 助けを借りてobjectwebでASMプロジェクトを調べることをお勧めします。 - http://jakarta.apache.org/bcel/

+3

ASMプロジェクト:http://asm.ow2.org/ – sova

+0

実際にバイトコードを手書きで書く場合、KrakatauはASMより優れています。 – Antimony

+0

申し訳ありません、リンク 'ASMのチュートリアル'が死んだ – zionpi

関連する問題