0

Javaなどの一部の言語がコードをほとんどまたはまったく変更せずに両方のLinuxで実行されるのはなぜかと思っていましたが、他の言語ではすべてのコードをほぼ書き直さなければなりません。どうしてこれなの?カーネルのせい?

これが単純な質問である場合は申し訳ありませんが、私は実際には多くの手がかりを持っていません。

また、Linuxの観点から見たCPUアーキテクチャの違いは何ですか。

4

5 に答える 5

9

技術的にはあなたは間違っています。

Java は Linux では実行されません。また、Windows では動作しません。Mac でも、他の Unix 系オペレーティング システムでも動作しません。さらに言えば、どのオペレーティングシステムでも実行されません。

マシン上で直接実行されます。Java 仮想マシンという 1 種類のマシンでのみ動作します。幸いなことに、Java 仮想マシンは Linux、Windows、Mac などで仮想化されています。

于 2012-04-09T18:57:41.500 に答える
4

非常に長い話ですが、本質的には次のとおりです。

  1. バイナリ実行可能ファイルは、常にプラットフォームに依存します。通常、プラットフォームを表すために OS + アーキテクチャと言います。例: Windows x86、Linux x86-64 など。これは、ほとんどの場合、利用可能なハードウェアの抽象化を提供するオペレーティング システムの助けを借りて実行されるためです。
  2. バイトコード (実行可能ではない) 解釈可能なファイルは、マシンに既にインストールされているプラ​​ットフォーム依存のバイナリによって解釈されるため、独立して実行できます。

Java コードは、バイトコード解釈可能なファイル (.class) に変換されます。これは、Windows、Linux、Mac プラットフォームにインストールできる、プラットフォームに依存する Java 仮想マシンによって解釈および実行されます。

ただし、C/C++コードをプラットフォームに依存しないように努力することはできますが、OS が異なる (場合によってはアーキテクチャが異なる) ため、実行するすべてのシステムでその (同じ) コードをコンパイルする必要があります。その特定のマシンで実行される適切なバイナリを構築します。

OBS: コードの独立性を高めるには、すべてのシステムで利用可能なライブラリを使用する必要があります。

OBS2: 実行可能ファイルについて詳しく知るには、良い「答え」のある良い「質問」があります:実行可能ファイルには実際に何が含まれていますか?

于 2012-04-09T19:04:23.510 に答える
1

Java はマシン コードにコンパイルされるのではなく、JVM (Java 仮想マシン) によって実行されるバイト コードにコンパイルされるためです。JVM は、OS 固有の処理を行います (また、OS 機能への統一されたインターフェイスを Java プログラムに提供します)。

于 2012-04-09T18:57:15.700 に答える
0

Java は、Java 仮想マシン (JVM) と呼ばれる仮想コンピューター上に構築されます。JVM がコンピュータに適切に実装されている限り、すべての Java プログラムはほとんど労力をかけずに実行できます。注意点は、ハードコードされたパス名など、コード自体にオペレーティング固有の項目が含まれている場合です (これらは、たとえば、Unix と Windows で異なります)。

于 2012-04-09T18:58:24.030 に答える
0

問題は言語ではなく、使用するライブラリにあります。私は、Windows と Linux の両方で同じコードの 99% を簡単に使用するプロジェクトに取り組んでいます。これができるのは、Windows と Linux の両方に実装されたライブラリを使用しているためです。ライブラリは、プラットフォーム固有のコードをカプセル化します。Java も同じです。プラットフォームごとに異なる方法で実装された標準ライブラリがあります。

于 2012-04-09T18:58:33.483 に答える