Java垃圾收集流程

来源:互联网 发布:saa7130 tv card软件 编辑:程序博客网 时间:2024/06/06 20:23
Java具有良好的垃圾收集特性,也就是GC是整个Java之中的最重要的安全保证,它可以保证即使不那么精深的开发者也能够写出合理的代码。整个JVM的GC的处理机制:对不需要的对象进行标记,而后进行清除。

Java堆内存


JDK1.8之后,Java堆内存分为了三块:
· 年轻代:新对象和没达到一定年龄的对象都在年轻代;
· 老年代:被长时间使用的对象,老年代的内存空间应该要比年轻代更大;
· 元空间:一些方法中的操作临时对象,动态加载处理时产生的对象,直接使用物理内存;(1.7之前永久代,使用虚拟机内存)


垃圾回收流程
对于整个的GC流程里面,那么最需要处理的就是年轻代与老年代的内存清理操作,而元空间(永久代)都不在GC范围内;
1、当有一个新的对象产生是,那么对象一定需要内存空间,于是现在就需要为该对象进行内存空间的申请;
2、首先会判断伊甸园是否有内存空间,如果此时有内存空间,则直接将新对象保存在伊甸园;
3、如果此时伊甸园的内存空间不足,那么会自动执行一个Minor GC操作,将伊甸园区的无用内存空间清理,清理之后继续判断伊甸园的内存空间不足,如果内存空间充足,则将新的对象之间在伊甸园区进行空间的分配;
4、如果执行了Minor GC之后发现伊甸园区的内存依然不足,那么这个时候会对存活区进行判断,如果存货区有剩余空间,则将伊甸园区的部分活跃对象保存在存货去,那么随后继续判断伊甸园区的内存空间是否充足,如果充足,则进行空间的分配。
5、如果此时存活区也已经没有内存空间了,则继续判断老年区,如果老年区空间充足,则将在存活区的活跃对象保存到老年区,而后存活区就有空余空间,随后伊甸园区将活跃对象保存到存活区中,而后在伊甸园区为新的对象分配空间。
6、如果此时老年区的空间也满了,那么这个时候将产生Major GC(Full GC),进行老年代的空间的内存清理。
7、如果老年区执行了Full GC之后发现依然无法进行新对象的空间分配,就会产生“OutofMemoryError”。


0 0
原创粉丝点击