1:到目前为止,有10中垃圾回收器
图一
在讲解这些垃圾回收器前,我们先回顾一下这张图(虚拟机总内存模型图)
图二
GC是发生在运行时数据区--堆,方法区(元空间)
我们一起看看堆的内存结构:包括两个大的内存:年轻代,老年代。而年轻代分为伊甸园区,幸存区(有的叫法是存活区)
年轻代内存占堆内存:1/3。而伊甸园占年轻代的8/10,幸存区S0,S1占幸存区总的内存:1/10,1/10
老年代内存占堆内存:2/3
图三
下面描述产生GC过程:minor GC、Full GC都会产生事件:STW(stop the word),即用户请求的线程会卡顿(停止,所以为什么一些网站会卡顿,可能这个原因
1:当new一个对象的时候,这个对象来到年轻代的伊甸园,先判断伊甸园空间是否充足,充足则直接放入伊甸园
2:当伊甸园空间不足(使用gc工具可以看图达到一个峰值),此时图二的执行引擎会发起一个minor GC的垃圾收集线程处理垃圾(垃圾算法使用GC Roots(跟可达性分析算法)),会把部分的伊甸园对象放入s0或者s1,此时因为s1,s0存活区的对象,gc已经标记过,记为,1,2,3.....也即是说每minor GC触发一次,同样一个对象没有被清理掉,
3:当s0,s1次数达到15次,会把s0,s1的对象放入到老年代
4:当老年代的内存空间全部挤满,那么图二的执行引擎会产生 Full GC(具体是什么垃圾收集器看执行引擎)
5:当老年代垃圾清理后,老年代内存不足以保存S0,S1存活区的对象,那么就会抛出:OutOrMemorryError
jdk自带的GC工具(win+R-->cmd命令):jvisualvm