日本語
[面接質問] Java Stack & Heapの構造について

[面接質問] Java Stack & Heapの構造について

JavaのStackとHeapに関する面接の質問まとめ

Java のメモリ構造

JVMの構造と原理の内容を参考にしてください

アプリケーション実行のために構築したJava Runtime Data Areaがメモリに位置することになる。

  • PC Register, Native Method Stack, Method領域は全てのスレッドが共有します。

  • StackとHeap領域だけがスレッド固有の領域として持つことになります。

Heap の構造

Eden → Survivor → Old

上記のような形でオブジェクトが移動するのですが、基本的には生成順で理解すればいいと思います。

Garbage Collectorの役割

  • Eden: Javaオブジェクトが生成されるとすぐに保存される空間。

  • Survivor & Old: 参照度によってオブジェクトが移動された空間。

  • Mark and Sweep アルゴリズムを使用します。

Minor Garbage Collector

EdenとSurvivor領域(Young Generation)のメモリが許容値を超えた場合、オブジェクトの参照に基づいて領域を移動させる役割。

Major Garbage Collector

Old領域(Tenured Generation)のメモリが許容値を超えた場合、参照されていないオブジェクトを全て削除してメモリを回収する役割。

  • 削除の過程でガベージコレクタを実行するスレッドを除いた残りのスレッドを全て停止('Stop-The-World')。

Stackの構造

基本データ型 + 地域変数 + パラメーター

ここで、パラメータの場合、オブジェクトのアドレス値を持ってHeap領域のオブジェクトを参照する形で使用されます。

→ パラメータが他のオブジェクトを参照する場合、アドレス値が変わるだけで、Heapに保存されたオブジェクトがすぐに消えることはありません! (Major GCが実行されるまでHold)

参考

コーディングファクトリーの記事

댓글 작성

게시글에 대한 의견을 남겨 주세요.

댓글 0