5

Java は初めてなので、ソース コードからハードウェア固有のバイナリまでの完全なビルド プロセスを理解できません。基本的に私は Java 用の Eclipse を使用しており、ソース コード (.java) からバイナリへのすべての変換がどのように行われるか、すべてのファイルがリンカー、プリプロセッサなどを使用してリンクされているかを知りたいと考えています。

Java の完全なビルド プロセスの詳細を示すリンクを教えていただければ幸いです。すでにこのフォーラムを検索しましたが、詳細情報は得られませんでした。

ありがとう

編集:

より正確に言うと、C で次のビルド プロセスに相当する Java を探しています。次のような図は必須ではありませんが (推奨されます)、完全な Java ビルド プロセスに含まれる 'n' 個の順次/並列ステップを記述することができれば、非常に高く評価されます。@Tom Anderson が提供する情報の多くは、私にとって非常に役立ちます。

ここに画像の説明を入力

4

2 に答える 2

8

最初に認識すべきことは、質問に誤った仮定が含まれていることです。「ソース コードからハードウェア固有のバイナリまでの完全なビルド プロセス」について質問されますが、通常の Java ビルド プロセスではアーキテクチャ固有のバイナリが生成されることはありません。アーキテクチャに依存しないバイトコードまで到達し、その後停止します。ほとんどの場合、そのバイトコードはネイティブ コードに変換されて実行されることは確かですが、そのステップは実行時に JVM 内で完全にメモリ内で行われ、バイナリ ファイルの生成は含まれませ。ビルドプロセス。

これには例外があります。GCJなどのコンパイラはネイティブ バイナリを生成できますが、それが行われることはめったにありません。

そのため、ビルド プロセスの一部として発生する重要なステップはコンパイルだけです。コンパイラはソース コードを読み取り、通常の解析と解決の手順を実行して、バイトコードを出力します。そのプロセスは決して指定されていません。いつものように、言語仕様は言語の要素が何であるか、およびそれらが何を意味するかを定義しますが、それらをコンパイルする方法は定義しません。出力の形式で指定されているもの: バイトコードはクラス ファイルの形式でパッケージ化され、クラスごとに 1 つです。これらは、配布を容易にするためにjar ファイルにグループ化できます。

クラスファイルが実行されるようになると、実行が可能になる前に必要な追加の手順があります。これらは、JVM 仕様でのロード、リンク、および初期化に関する章で非常に明確に指定されています。しかし、私が言ったように、これらは実際にはビルド プロセスの一部ではありません。

ビルド プロセスでは、通常はコンパイルの前に、依存関係の解決とダウンロード、リソースのコピーと文字セット間の変換、およびコードの生成など、いくつかのステップが発生する可能性があります。しかし、これはどれも標準的なものではなく、さまざまなビルド ツールによってコンパイルのコア プロセスに追加されるすべてのものです。

于 2012-05-08T12:25:11.173 に答える
3

「舞台裏」で何が起こっているのかを知りたい場合は、チェックアウトできるクールな記事がいくつかあります。

http://www.codeproject.com/Articles/30422/How-the-Java-Virtual-Machine-JVM-Works

これはそのうちの1つであり、コードを実行するためにすべての部分がどのように相互作用するかについての適切な説明があります。

主なアイデアは、仮想マシンで実行するJavaファイルからバイトコードを作成し、Javaコードを(多かれ少なかれ...)実行しているOSやプラットフォームから独立させることです。

その環境に固有のJVMは、そのバイトコードを、コードを実行している特定のアーキテクチャの実際の命令に変換する役割を果たします。

これが、Javaの「Writeonce、runeverywhere」というマントラの基本です。マントラは常に成り立つわけではありませんが...それは一般的にはまだ真実です。

于 2012-05-08T11:44:21.777 に答える