ホームページ >Java >&#&チュートリアル >15.Javaの基本 - ヒープとスタック

15.Javaの基本 - ヒープとスタック

黄舟
黄舟オリジナル
2017-02-27 10:55:591280ブラウズ

基本概念

Java には、データを保存できる場所が 6 つあります。


1. レジスタ

はプロセッサ内にあるため、アクセス速度が非常に速く、プログラムでは制御できません。


2. スタック

はスタックであり、スタックは汎用RAMに配置されます。記憶速度ではレジスタに次ぐ速度です。針。

次の機能があります:

  • スタック ポインタを介してメモリ を制御します。下に移動すると新しいメモリが割り当てられ、上に移動するとそのメモリが解放されます。したがって、プログラムを作成するとき、Java コンパイラは、単一のスレッドに属するスタック ポインタを上下に移動するための適切なコードを生成する必要があるため、スタックに格納されているすべてのデータの正確なサイズと有効期間を把握している必要があります。各スレッドにはスタック メモリがあり、それが格納する変数は、そのスレッドが属するスレッド内でのみ表示できます。つまり、スタック メモリはスレッドのプライベート メモリとして理解できます。

  • スタック内データ共有。

  • 基本的なタイプの変数データ、オブジェクト、または配列への参照を保存します
  • 。ただし、オブジェクト自体はスタックに格納されず、ヒープ (new によって作成されたオブジェクト) または定数プール (文字列定数オブジェクトは定数プールに格納されます) に格納されます。

  • FILO 先入れ後出しルールがあります。

  • 3. Heap

  • はヒープであり、すべての Java オブジェクトを格納するために使用されます (RAM にも存在します)。平たく言えば、すべての新しいオブジェクトを保存することです。

ヒープとスタックの違いは、ストレージの割り当てに優れた柔軟性を持っていますが、時間がかかることです。理由:

コンパイラーは、ヒープから割り当てる記憶域の量を知る必要がありません。

また、コンパイラーは、保存されたデータがヒープ内にどれだけ長く存在するかを知る必要もありません。
  • オブジェクトを作成する必要がある場合は、単純なコード行を記述するだけで済みます。このコード行が実行されると、ストレージがヒープに自動的に割り当てられます。
  • 4. メソッド領域

は、ロードされたクラス情報、定数、静的変数、およびジャストインタイムコンパイラによってコンパイルされたコードを格納するために使用されます。


5. 定数プール

定数プールはメソッド領域の一部です。


String str="www" などのストレージ文字列定数と基本型変数。実際、「www」は定数プール内にあります。

Java の 8 つの基本型 (Byte、Short、Integer、Long、Character、Boolean、Float、Double) は、Float と Double を除き、他の 6 つの型はすべて定数プールを実装していますが、それらは (-128

基本概念

Java には、データを保存できる場所が 6 つあります。

1. レジスタ

はプロセッサ内にあるため、アクセス速度が非常に速く、プログラムでは制御できません。


2. スタック

はスタックであり、スタックは汎用RAMに配置されます。記憶速度ではレジスタに次ぐ速度です。針。

次の機能があります:

スタック ポインタを介してメモリ

を制御します。下に移動すると新しいメモリが割り当てられ、上に移動するとそのメモリが解放されます。したがって、プログラムを作成するとき、Java コンパイラは、単一のスレッドに属するスタック ポインタを上下に移動するための適切なコードを生成する必要があるため、スタックに格納されているすべてのデータの正確なサイズと有効期間を把握している必要があります。各スレッドにはスタック メモリがあり、それが格納する変数は、そのスレッドが属するスレッド内でのみ表示できます。つまり、スタック メモリはスレッドのプライベート メモリとして理解できます。

    スタック内データ共有。
  • 基本的なタイプの変数データ、オブジェクト、または配列への参照を保存します
  • 。ただし、オブジェクト自体はスタックに格納されず、ヒープ (new によって作成されたオブジェクト) または定数プール (文字列定数オブジェクトは定数プールに格納されます) に格納されます。
  • FILO 先入れ後出しルールがあります。

  • 3. Heap
  • はヒープであり、すべての Java オブジェクトを格納するために使用されます (RAM にも存在します)。平たく言えば、すべての新しいオブジェクトを保存することを意味します。

    ヒープとスタックの違いは、ストレージの割り当てに優れた柔軟性があることですが、時間がかかることです。理由:
  • コンパイラーは、ヒープから割り当てる記憶域の量を知る必要がありません。

また、コンパイラーは、保存されたデータがヒープ内にどれだけ長く存在するかを知る必要もありません。

オブジェクトを作成する必要がある場合は、単純なコード行を記述するだけで済みます。このコード行が実行されると、ストレージがヒープに自動的に割り当てられます。

    4. メソッド領域
  • は、ロードされたクラス情報、定数、静的変数、およびジャストインタイムコンパイラによってコンパイルされたコードを格納するために使用されます。

  • 5. 定数プール

    定数プールはメソッド領域の一部です。

    String str="www" などのストレージ文字列定数と基本型変数。実際、「www」は定数プール内にあります。

    Java の 8 つの基本型 (Byte、Short、Integer、Long、Character、Boolean、Float、Double) は、Float と Double を除き、他の 6 つの型はすべて定数プールを実装していますが、それらは (-128

    上記は「15.Java Basics - Heap & Stack」の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。