1
Javaでの静的割り当て-ヒープ、スタック、永続的な生成
私は最近、Javaでのメモリ割り当てスキームについてたくさん読んでいますが、さまざまなソースから読んでいるので、多くの疑問がありました。私は私の概念を集めました、そして私はすべてのポイントを通過し、それらにコメントすることを要求します。メモリの割り当てはJVM固有であることを知ったので、私の質問はSun固有であると前もって言わなければなりません。 クラス(クラスローダーによってロードされた)は、ヒープ上の特別な領域(Permanent Generation)に配置されます クラスの名前、クラスに関連付けられたオブジェクト配列、JVMが使用する内部オブジェクト(java / lang / Objectなど)、および最適化情報などのクラスに関連するすべての情報は、Permanent Generation領域に入ります。 すべての静的メンバー変数は、Permanent Generation領域に再び保持されます。 オブジェクトは別のヒープに移動します:若い世代 クラスごとに各メソッドのコピーが1つだけあり、メソッドは静的または非静的です。そのコピーは、Permanent Generation領域に配置されます。非静的メソッドの場合、すべてのパラメーターとローカル変数がスタックに格納されます。そのメソッドが具体的に呼び出されると、それに関連付けられた新しいスタックフレームが取得されます。静的メソッドのローカル変数がどこに保存されているのかわかりません。彼らは永久世代の山にいますか?または、それらの参照のみが永続生成領域に格納され、実際のコピーは別の場所にあります(どこに?) また、メソッドの戻り値の型がどこに格納されるのかわかりません。 (若い世代の)オブジェクトが(永続的な世代の)静的メンバーを使用する必要がある場合、それらには静的メンバーへの参照が与えられます。また、メソッドの戻り値の型などを格納するのに十分なメモリ領域が与えられます。 ご覧いただきありがとうございます!