1

私はJVM(HotSpot)を初めて使用し、そのアーキテクチャとその仕組みを理解しようとしています. JVMがクラスファイルをロードするとき、すべてのメソッドをどこかにロードしますか? メソッド領域が好きですか?またはネイティブメソッドスタック?

4

6 に答える 6

2

これはJVMの実装に依存します。JVMが異なれば、これをさまざまな方法で処理することを選択できます(Java仕様に準拠している場合)。したがって、絶対的な保証はありません。

Sun / Oracle JVMでは、メソッドデータは「パーマネントジェネレーション」と呼ばれる特別なメモリ領域にロードされます。これは、クラスなどの長寿命オブジェクト用にガベージコレクタによって予約されたメモリ領域です。

他のほとんどの「産業用」JVMは、同様のことを行う可能性があります。

見る:

PS

これはすべて非常に高度なものです。JavaやJVMをうまく利用するために、これについて何も知る必要はありません一般に、JVMがユーザーに代わってメモリ管理を行い、効率的に実行すると想定する必要があります。専門家による長年の調整が行われています。

JVMの要点は、結局のところ、特定のプラットフォームの実装の詳細から抽象化できるようにすることです......

于 2012-08-06T03:18:42.587 に答える
1

正確には、

  • すべてのメソッド (静的および非静的) がメソッド領域にロードされます。

  • メソッド呼び出し、ローカル変数、中間結果、および実行行がスタックに格納されます。

  • メソッドが実行されている場合、それはスタックの一番上にあります。実行が完了すると、すべての結果が消去されます。ローカル参照変数がある場合、それらは無効になります。

  • 実行中のメソッドに関係なく、メソッド Area にはクラス情報があります。これはブラウザのキャッシュに似ており、JVM に必要な情報を保持しています。

于 2018-02-05T13:41:02.543 に答える
0

一般的に、JVM の要点に関するこの素晴らしい記事を読むことをお勧めします。

https://anturis.com/blog/java-virtual-machine-the-essential-guide/

于 2015-04-23T10:05:56.767 に答える
0

はい、すべてのメソッドがバイト コードに変換されます。バイトコードファイルは、jvm がロードする中間ファイルです。

jvmがクラスファイルをロードするとき? クラスが最初に使用されたときに実行されます -- いくつかの状況が含まれます:

  1. クラスのインスタンスの作成: new 演算子、リフレクション、クローン メソッド、または逆シリアル化。
  2. クラスの静的メソッドを呼び出します。
  3. final static 変数を除くクラスまたはインターフェイスの static 変数を使用または評価します。それらはコンパイル時の定数であるためです。
  4. リフレクションによるメソッドの呼び出し。
  5. クラスのサブクラスをロードしています。インターフェイス以外のクラスに対してのみ機能します。
  6. jvm のブートストラップ クラス。例えば。メインメソッドを含むクラス。
  7. インターフェイスを実装するクラスを初期化するときにインターフェイスを初期化する必要はありませんが、ロードする必要があります。

はい、メソッドはメソッド領域にロードされます。つまり、バイトコードファイルがメソッド領域にロードされます。

于 2012-08-06T03:29:07.283 に答える