针对的是堆内存。
Java中的每种数据类型大小都是确定的,所以所有的内存是由Java自己进行分配,意味着内存的管理和回收也是由JVM自己进行—在Java中一旦产生内存问题导致程序员无法处理。理论上在正常情况下Java中的堆内存是足够使用的
— 当堆内存使用的负荷量(一般情况下70%)超过一定限度的时候,会启动垃圾回收器(Garbage Collector —
GC)进行堆内存的回收释放
Heap space
Young Generation
eden
survivor
from space
to space
Old Generation
扩展:eden:from:to = 8:1:1
对象刚创建的时候是先放入新生代中的伊甸园区;如果在伊甸园区经过一次回收依然存在,那么将这个对象挪到幸存区,在幸存区中经过多次回收这个对象依然存在则挪到老生代。在回收的时候先回收新生代,如果新生代回收之后的内存足够使用则不扫描老生代;如果不够则扫描老生代。老生代的扫描频率要低于新生代
发生在新生代的回收 — 初代回收 minor gc
发生在老生代的回收 — 完全回收 full gc
扩展:对象创建完成之后会先试图放入新生代;如果新生代经过回收之后也放不开,则直接试图将该对象放入老生代。老生代如果也放不开,则会出现错误 — OutOfMemoryError