- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Java/メモリ設定のあれこれ へ行く。
- 1 (2015-08-26 (水) 08:11:22)
- 2 (2015-08-26 (水) 09:14:19)
- 3 (2015-08-27 (木) 01:29:54)
参照:まず、ここが丁寧で分かりやすい。
ヒープとスタック†
メモリには
- ヒープと
- スタックがあって
ヒープはnew(alloc)して確保するのに使う。スタックは関数呼び出しで確保するのに使う。
スタック†
関数を呼び出すと関数ごとにフレームという単位でスタックに領域が確保される。
main() { a(); } a() { b(); }
とすると
┌──┐ │main│↓下向きに積まれるとして ├──┤ │a │ ├──┤ │b │ └──┘
関数ローカルな変数がここで確保される。
ヒープ†
動的にメモリをallocするのに確保する領域。クラスをnewしてインスタンス化するものはすべてここ。
┌──────────────┬──────────────┐ │New領域 │Old領域 │ │<--- Eden ---><- Survivor ->│ │ └──────────────┴──────────────┘
New領域とOld領域†
ヒープ領域もいろいろありNew領域とOld領域がある。
短命なインスタンスはNew領域で済ませたい、ということがあり頻繁にnewしては破棄するならNew領域が大きいほうがよい、ということになる。が、Old領域が少な過ぎてもフルGCがはたらきやすくなるので宜しくない。
-XX:NewRatio=2
New領域に対するOld領域の割合を指定する。この場合 New領域:Old領域 = 1:2 になる。
Eden領域とSurvivor領域†
New領域もいろいろあり(またか)Eden領域とSurvivor領域がある。
New領域のなかでさらに効率化するための仕組み。Survivor領域の割合が小さいとOld領域に行きやすくなる。
-XX:SurvivorRatio=8
Survivor領域のFrom空間とTo空間に対するEden領域の割合を指定する。この場合 Eden領域:Survivor領域 = 8:(1+1) になる。