针对的是堆内存.
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
来源: http://www.bubuko.com/infodetail-2761616.html