2

私はこの質問が少しばかげていることを知っています。

私はJavaプログラマーであり、これまでJavaソースコードを調べたことはありません。Java(公式)フレームワーク(たとえば、javax.swing。、java.util。、java.collection。*、blah blahなど)を使用してアプリを構築しています。 。

ここで、Javaソースコード(私はブラックボックスプログラミングパラダイムの犠牲者です)を調べてみると、ソースコードが完全にJavaで記述されていることがわかりました。さて、私は混乱しています。私たちがよく使用しているフレームワークを形成するために、Java(Javaソースコードでは少し混乱していることを知っています)によって使用されているフレームワークは何ですか?

心から私はJavaソースにアセンブリのようなコードが表示されることを期待していましたが、実際はそうではありません。私たちが使用する通常のフレームワーク(java 。。、javax。。)は、JVMへの最低のエントリポイントではないと「感じます」 それよりも「低い」ものがあるはずです。

誰でもこれについて説明できますか?

4

3 に答える 3

3

ほとんどのJavaライブラリ(フレームワークと呼ばれるもの)はJavaで書かれています。コンパイルされたバイトコードを解釈するJVMは、ほとんどの場合C ++で実装されており、ライブラリには、低レベル言語(CまたはC ++)で記述された「ネイティブ」メソッドが含まれています。

メソッドは、プラットフォームの依存関係(プラットフォームごとに異なる必要があるもの)とパフォーマンス(常に使用され、ネイティブコードであることの恩恵を受けるもの)の2つの理由で低水準言語で記述されています。

その結果、ほとんどすべてのライブラリがプラットフォームに依存せず、プラットフォームごとに書き直す必要がなくなります。非Javaコードの範囲は、プラットフォーム固有である必要があるもののみに制限されます。

于 2012-10-11T04:03:57.527 に答える
1

私は専門家ではありませんが...

JVMは、Javaソースコードをマシンコードに変換します。これが最低レベルです。Javaソース(JVM)を実行するものがあれば、その周りにフレームワークを作成できます(Javaで)。

とは言うものの、まだいくつかのネイティブOS関数呼び出しがあります-申し訳ありませんが、それらについてはよくわかりません。

参考までに、.NETは同じで、.NETで記述されたフレームワークであり、ネイティブ呼び出しがちりばめられています。

于 2012-10-11T03:53:49.447 に答える
1

Javaソースコード:Javaプログラム言語で記述されたコード

javac:コマンドラインユーティリティ。Javaソースコードをクラスファイル(バイトコードを含む)にコンパイルするために使用されます。

jvm:クラスファイルをロードし、そのファイルのバイトコードを実行します。

バイトコード:アセンブリ言語のように見える命令セット。1つの命令の長さは1バイトです(そのため、バイトコードと呼ばれます)。

JNI:Java Native Interface(主にC / C ++で記述)。これは、Javaプログラムの機能を消費するためのインターフェイスであり、OSに関する一部のプログラムなど、Javaを使用して実装するのは困難/不可能です。

バイトコードは次のようになります。

public static void main(java.lang.String[]);
Code:
    0: ldc           #16                 // String a a \"fsd  fsd\" sfd gfd  \"fs  d\"
    2: astore_1
    3: getstatic     #18                 // Field java/lang/System.out:Ljava/io/PrintStream;
    6: aload_1
    7: invokestatic  #24                 // Method t:(Ljava/lang/String;)Ljava/lang/String;
    10: invokevirtual #28                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
    13: return

上記のコードは、コマンドユーティリティjavapを使用して取得できます。

于 2012-10-11T05:01:43.493 に答える