home wiki.fukuchiharuki.me
Menu
参照:まず、ここが丁寧で分かりやすい。
- [[JVMのチューニング - ITエンジニアとして生きる>http://d.hatena.ne.jp/ogin_s57/20120709/1341836704]]

* ヒープとスタック [#df478ed8]
メモリには
- ヒープと
- スタックがあって

ヒープはnew(alloc)して確保するのに使う。
スタックは関数呼び出しで確保するのに使う。

* スタック [#s3ac9982]
関数を呼び出すと関数ごとにフレームという単位で
スタックに領域が確保される。
 main() {
   a();
 }
 a() {
   b();
 }
とすると
 ┌──┐
 │main│↓下向きに積まれるとして
 ├──┤
 │a   │
 ├──┤
 │b   │
 └──┘
関数ローカルな変数がここで確保される。

* ヒープ [#efeb974e]
動的にメモリをallocするのに確保する領域。
クラスをnewしてインスタンス化するものはすべてここ。

** New領域とOld領域 [#ka3314d4]
ヒープ領域もいろいろあり
New領域とOld領域がある。

短命なインスタンスはNew領域で済ませたい、
ということがあり頻繁にnewしては破棄するならNew領域が大きいほうがよい、
ということになる。
が、Old領域が少な過ぎてもフルGCがはたらきやすくなるので宜しくない。

** Eden領域とSurvivor領域 [#za9694f3]
New領域もいろいろあり(またか)
Eden領域とSurvivor領域がある。

New領域のなかでさらに効率化するための仕組みで、
SurvivorRatioが大きいとOld領域に行きやすくなる。
デフォルト値が8でデフォルトままが推奨のよう。