- 当现在有一个新的对象产生,那么对象一定需要内存空间。于是现在就需要为该对象进行内存对象的申请。
- 首先会判断伊甸区是否有内存空间,如果此时有内存空间,则将新对象保存到伊甸区中。
- 但如果伊甸区的内存空间不足,那么会自动执行一个Minor GC操作,将伊甸区无用的内存空间进行清理,当清理之后会继续判断伊甸区的空间是否充足?充足则将新的对象进行空间分配。
- 如果执行Minor GC发现伊甸区的内存仍然不足。那么这个时候会进行存活区的判断,如果存活区有剩余空间,则将伊甸区的部分对象保存在存活区,那么随后继续判断伊甸区的空间是否充足,如果内存充足,则在伊甸区进行空间分配。
- 如果此时存活区也已经没有内存空间了,则开始判断老年区。如果此时老年区的空间充足,则将存活区中的活跃对象保存在老年代,而后存活区就会存现有空余空间。随后,伊甸区将活跃对象保存在存活区中,而后在伊甸区里为新对象开辟内存空间。
- 如果这个时候老年代也满了,那么这个时候将产生Major GC(FULL GC),进行老年代的内存清理
- 如果老年代执行了FULL GC之后,依然无法进行对象的保存,就会产生OOM()y异常OutOfMemoryError