gc算法(Tracing Gc)
通过gcroot集合,通过对象之间的引用关系遍历对象关系图,判断对象可达性的算法
引用计数法(Java没有用)
有引用就++;没有引用就--;为零就回收。缺点无法判断循环引用
标记-清除
从根节点开始遍历,标记活跃对象,清除不可达对象
复制(压缩)
开辟一块相同大小的空间,将活跃对象复制进去,并清除之前内存的所有对象
标记压缩
标记活跃对象,将活跃对象压缩到内存一端,并清除边界外的对象
gc触发条件
minorgc
新建的对象会存放在伊甸区,当伊甸区满了触发minorGC
majorGC
发生在老年代的gc,采用标记清除和标记压缩
fullGC
System.gc();
当minorgc复制到老年代的对象多余老年代剩余内存的时候触发
新生代的平均大小高于老年代剩余内存
创建大对象或者大数组过多时