JAVA中关于GC的分析中,需要搞清楚,GC线程在什么时候,对什么东西,做了什么操作。
1-在什么时候
首先需要知道,GC分为minor GC和full GC,JAVA内存分为新生代和老年代,新生代中又分为1个Eden区(使用区)和2个survivor区(保留区)。
minor GC的触发条件: 如果新生代中Eden区没有足够的内存空间,那么就会触发minor GC。
full GC的触发条件:如果老年代内存区没有足够内存,那么就会触发full GC。
2-对什么东西
JAVA使用根搜索算法(GC Roots Tracing)判断对象是否存活着。这个算法的基本思路就是:通过一系列名为"GC Roots"对象作为起始点,
从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链时,则证明此对象没有被引用。
3-做什么操作
做清理对象,整理内存的操作。