4

これがどのように発生するのか疑問に思っています.JavaプログラムはどのようにOSプロセスにマップされていますか(以下のLinux用に示されているように):
から借用: linuxjournal.com

C では、プログラムの作成方法と、OS 内でのコール スタック全体の処理方法が単純に関連付けられています。Javaでマッピングがどのように達成されるのか疑問に思っていましたか? オブジェクトで呼び出されたメソッド meth() は、obj.meth() のアドレスを特定することに変換され、それ以降はスタックが C のように使用されますか?

前もって感謝します!

編集: 他の OOP 言語が一般的に使用するモデル (C++、Python など) も知りたいです。

4

2 に答える 2

4

これはかなり複雑な問題です。これは、このトピックに関するかなり良い記事です。つまり、Java には 2 つの実行モードがあり、メモリ レイアウトに大きく影響します。

  1. 一部のコードはインタプリタによって実行されます
  2. 一部のコードは、パフォーマンスを向上させるためにネイティブ コードにコンパイルされます。

この wiki ページを参照してください: http://en.wikipedia.org/wiki/Just-in-time_compilation .

また、JVM には、perm-gen、JIT 用のメモリなど、より多くのタイプのメモリ領域がありました。

これは他のスレッドでよく議論されています:

  1. Java とメモリ レイアウト
  2. jdk1.6 メモリ レイアウト
于 2012-05-15T23:10:52.223 に答える
1

ほとんどの Java JVM は単純な C プログラムです。したがって、画像は、解釈/実行される最初のクラスファイルまで同じ書き込みになります。

その後は、JVM の実装に依存します。通常、スタック ストレージを使用して、どのクラスがロードされているか、どのスレッドが実行されているかなどの制御タイプの情報を追跡します。実際の「プログラム」ストレージについては、インタプリタとガベージ コレクタはプレーンな「malloc」/「mfree」を使用してガベージ コレクターが機能できるように、メモリの割り当てと解放に加えて、いくつかのかなり複雑な制御構造を作成します。

于 2012-05-16T01:32:29.603 に答える