0
0

Javaのメモリ領域(スタック領域、ヒープ領域)について

Posted at

目次

メモリ
スタック領域とは
ヒープ領域とは
メモリ確保のイメージ
値型のメモリ確保のイメージ
参照型のメモリ確保のイメージ
おまけ
リストとは
挿入
削除
単方向リスト
循環リスト
参考文献、参考サイト
関連記事

メモリ

プログラムの実行時に利用される記憶領域(メモリ領域)には

  • スタック領域
  • ヒープ領域

がある

スタック領域とは

  • 一般にコールスタック、制御スタック、と呼ばれている
  • LIFO(Last In First Out、先入れ後出し)方式で構成されている
スタック領域の「スタック」が指しているのは

⭕️メモリの解放と、メモリの確保
❌データの入れ方

メモリの解放とメモリの確保が、後入れ先出しの形になっているのを表している

基本情報や、応用情報の問題でも出てくるスタックのこと
sketch-1723695429597.png

  • プログラム実行中のサブルーチン1の情報を記憶しておくメモリ領域
    →スタック領域は、確保したのとは逆の順番で解放するのが特徴

  • サブルーチン1終了後の戻りアドレスや局所変数(ローカル変数)などを保持する

  • 値型(基本データ型、プリミティブ型)の値と、参照型載(オブジェクト型)の参照値2が保存される

ヒープ領域とは

  • 2つのラベルを持つ双方向リストで構成され、プログラム上から動的(任意)に確保できるメモリ領域
双方向リスト

次のデータへのポインタの他に、前のデータのポインタも持っているリスト構造

sketch-1723712256131.png
前後のどちらにもリストを辿っていくことができる
ポインタは、データが保管されているメモリ位置を示す

  • 動的にメモリ取得を繰り返すことによって、メモリ上にどこからも参照できない領域(ガーベージ)が発生する
  • どのような順序でメモリを確保、解放するかはソフトウェア側で自由に決められる
  • 参照型の値、オブジェクトのインスタンス、実際の値やメソッドが格納される
なぜヒープ領域というの?

ヒープ(heap)は「積み重なる」「堆積する」という意味
→プログラムの実行に伴い、動的に確保され、その領域が順次拡大する様子から「ヒープ」と呼ばれる

ツリー状のデータ構造のことを指す「ヒープ」とは別物
sketch-1723712252429.png

メモリ確保のイメージ

値型のメモリ確保のイメージ

20240809_005311 Copy.jpeg
変数を宣言すると、メモリのスタック領域に「1」という値が格納される

参照型のメモリ確保のイメージ

20240809_005311_Original Copy.jpeg

下記サイトにある

実際に値が格納されているのはロッカーの中で、変数はロッカーの番号が書いた鍵のイメージ

というのが理解しやすいかと思います。

おまけ

リストとは

  • リストの特徴:柔軟さ
    • ポインタさえ変えれば、いくらでもデータを繋ぎ変えることが可能
      データの追加・挿入・削除などがとても簡単にできる
  • リストはポインタを順に辿る必要がある
    →配列のように添え字を使って個々のデータに直接アクセスすることはできない

挿入

  • ポインタを削除した後、そこに新しいポインタを書く

sketch-1723712259804.png

削除

  • ポインタを削除した後、そこに一つ後ろへのポインタを書く

sketch-1723712264359.png

単方向リスト

  • 次のデータへのポインタを、1つだけ持っているリスト構造
  • 一方通行のため、先頭から順に辿っていくしかない

sketch-1723712269017.png

循環リスト

  • ポインタによってデータが環状に連結されているリスト構造
  • 最後尾のデータは、先頭データへのポインタを持つ
  • 全体が環状に繋がっていてグルグル回ることがでる

sketch-1723712272625.png

参考文献、参考サイト

  • きたみりゅうじ. キタミ式イラストIT塾 応用情報技術者 令和04年. ‎技術評論社, 2017, p.376-377

関連記事

  1. (他の値から呼び出される)関数 2

  2. 参照値は、値がメモリのどこに格納されているかを示す

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0