Javaヒープ領域/スタック領域/メソッド領域

登録:

最速の記憶領域は、プロセッサの内部に位置する、その数は非常に制限されています。したがって、要求レジスタに応じて自動的に、直接的な人間の制御が割り当てられていません

ヒープ:

RAM、共通メモリプールに位置の中で。前記格納されたデータは、JVMによって自動的に管理されます。

JVMのみヒープ(ヒープ)は、すべてのスレッドで共有されているのみオブジェクト自体を格納します。また、あなたがオブジェクトを必要とするとき、自動的にヒープ上のストレージを割り当てますのコード行を実行する際に新しいが、コードを一行も書か使用し、動的なメモリ割り当てとして知られています。使用後は、アイドル状態のガベージコレクタの回復に専念されます。

1. Javaヒープは、仮想マシンをパワーオンしたときに作成されたメモリ領域内のすべてのスレッドで共有され、メモリは、仮想マシン管理の最大の作品です。このメモリ領域の唯一の目的は、オブジェクトインスタンスと[]の配列に格納され、ほぼすべてのオブジェクトインスタンスおよびアレイは、メモリを割り当てるためにすべてここにあります。

2. Javaヒープはまた、GCゴミとして知られているガベージコレクタによって管理されるメインエリアです。これは、GCアルゴリズムの後ろの分析に専念されます。
ビューの記憶の回復から、コレクタが世代コレクションアルゴリズムを使用して基本的に今があるため、Javaヒープがに細分することができる:古い世代、新世代;
メモリ割り当ての観点から、スレッドがJavaヒープを共有して複数に分割することができますバッファ(TLAB)のプライベート割り当てスレッド;
かかわらず分裂に関係なく、どのエリアのコンテンツストアとは何の関係もない、ストレージは依然としてオブジェクトインスタンスと配列です。

そこにヒープメモリの割り当てには完全な例ではない、とヒープは、もはや広げることができない場合は3、それはOutOfMemoryErrorがスローされます。

4.メモリリークやメモリオーバーフロー
メモリリーク:いくつかの一時的なオブジェクトにプログラム動的に割り当てられたメモリを指しますが、オブジェクトがGCを回復することはできません、それは常にメモリを取ります。すなわち、使用可能なメモリ少なくなりますが、使用しなくなったために、最大割り当てられたオブジェクト。
メモリオーバーフロー:プログラムをいうミスによる十分なメモリを適用することはできません実行されています。メモリ・オーバーフローは通常、古い年または永続的な世代別ガベージコレクションで発生し、メモリがまだ新しいJavaの余地はありません事情オブジェクト。
メモリリークは、メモリリークの原因となっている唯一の要因ではありません。

スタック領域:

これは、スタック・ポインタによってサポートされるプロセッサから直接得ることができるRAM内に配置しました。新しいメモリを割り当てるスタックポインタの下方への移動は、そのメモリを解放するために、上方に移動しました。記憶レジスタの後にこの速度。

  そして、基本的なデータ型を格納するオブジェクト参照(なし文字列ことに注意してください)

  この方法は、ローカル変数のインビボ法で行う場合(参照型を含む基本的なデータ、オブジェクト)がスタック上に作成されます。

  プロセッサ命令セット、高効率が、割り当てられたメモリの限られた量のスタックメモリ割り当て動作のため。

  使用後は、すぐにリサイクルしています。

静的な記憶領域(面積法):

メインストア静的データ、静的データおよびグローバル定数。このメモリにプログラムのコンパイル時間が良好で、そこに全体のプログラムの実行時に割り当てられています。

1.メソッド領域は静的領域として知られており、プログラムは、常に唯一の要素記憶領域です。そしてヒープは、共有メモリ領域のさまざまなスレッドです。これは、クラスの情報は、仮想マシン、定数、静的変数をロードされている格納するために使用され、タイムコンパイラは、コードやその他のデータをコンパイルします。

2. Java仮想マシン仕様に加えて、この方法は非常にリラックスしたエリア、上の制限やJavaヒープメモリを選択し、サイズを固定または拡張することができることができるよう継続的な必要はありませんが、あなたはまた、ガベージコレクションを実装しないことを選択することができます。
ガベージコレクションの対象このエリアは主に荷降ろしの定数プールのリサイクルとタイプのため、一般的には、この領域のメモリ回復は、回復の特に種類は比較的満足できるものではないが、条件は非常に厳しいことができますが、地域のガベージコレクションのこの部分確かに必要。

3.多くの開発者は、「永久ジェネレーション」(パーマ世代)(Permanent世代)と呼ばれるメソッド領域に好む「常に簡単に変更されません内容を保持します。」HotSpotのJDK 1.7がリリースされましたでは、ヒープに移動永久世代の文字列定数プールの上に置かれていました。

4.実行時定数プール(実行時定数プール)ゾーン法の一部です。

スタックとヒープの違い:

  ストレージデータタイプ:スタック領域に格納基本的なデータ変数(文字列を含むわけではないことに注意する)と基準データ変数(新しいキーワードを使用して作成)、ヒープメモリは、(これらのオブジェクトのすべてのメンバ変数を含む)新しいによって作成されたすべてのオブジェクトを格納するために使用されますそして、配列

  あなたは特別なスタック変数を定義することができ、この可変配列またはオブジェクトの値は、ヒープメモリの先頭アドレスに等しく、この特定の変数は、我々は、上記の言っている参照変数私たちは、ヒープまたは配列内のオブジェクトにアクセスするには、この参照変数を使用することができます。

  記憶速度:メモリ速度、メモリの割り当てとスタックメモリ高速スタックを洗浄するために、直接プロセッサのレジスタの間で速度の背後に位置するスタックメモリストアの観点。

  柔軟性:により異なるスタックメモリとメモリ記憶機構ヒープに柔軟性、ヒープメモリの柔軟性とスタックメモリ以上の点から好ましいです。柔軟性:により異なるスタックメモリとメモリ記憶機構ヒープに柔軟性、ヒープメモリの柔軟性とスタックメモリ以上の点から好ましいです。

おすすめ

転載: www.cnblogs.com/alex-xyl/p/11298555.html