6

JVM は、クラス (メソッド) 領域、ヒープ、スタック、プログラム カウンタ レジスタ、ネイティブ メソッド スタックの領域をメモリに割り当てます。

ヒープはオブジェクトの格納に使用され、スタックはローカル変数と部分的な結果の格納に使用されることを知っています。定義によると、クラス (メソッド) 領域には、ランタイム定数プール、フィールドおよびメソッド データ、メソッドのコードなどのクラスごとの構造が格納されます。しかし、私は本当に違いを理解していません。

クラス領域とヒープの違いを教えてください。

4

2 に答える 2

15

Java 6 はすべての定数プールとクラス情報を Perm Gen に保存します

Java 7 はクラス情報のみを Perm Gen に格納します。文字列リテラル プールはヒープ上にあります。

Java 8 には Perm Gen がありません。リテラル プールとクラス情報はヒープにあります。

あなたは違いを説明しました。メソッドのようなクラス構造は perm gen に保存されます。各インスタンスのデータはヒープに格納されます。

これらのタイプのデータは非常に異なるライフサイクルを持つため、これらは分離されました。たとえば、オブジェクトは通常、寿命が短く、クラスは通常、非常に長く存続します。

私の知る限り、あまりにも多くの開発者が混乱しているため、彼らはそれを削除しています。

于 2013-10-12T23:00:12.347 に答える
7

クラス (メソッド) 領域には、プログラムのコードであるコードが格納れます。ヒープには、オブジェクト インスタンスが格納されます。例えば:

public void MakeSomeFruit(){

   Fruit myFruit=new Fruit();

}
  • MakeSomeFruit コードはクラス領域に格納されます。
  • 実行されると、作成される実際の Fruit インスタンスがヒープに格納されます。
  • 実行されると、myFruit参照変数がスタックに格納されます。これは、メモリ内のインスタンスの場所を指す単なる数字、つまりアドレスです。
于 2013-10-12T22:58:16.423 に答える