- 垃圾处理算法分为以下几种
- 标记清除(mark & sweep):先从根出发将可以清除的对象都标记一遍,然后统一清除。缺点是当堆过大时,耗时较久,会存在很多碎片空间。
- 复制:将堆内存空间分为两部分(from和to),扫描from时将不能清除的数据复制到to中,然后清空from,如此反复。适用于新生代区域的GC,缺点是浪费了百分之五十的空间。
- 标记移动:先标记一遍,然后将存活的对象朝一边移动,适合老年代区域,可以避免内存碎片,但是移动消耗巨大。
- 分代算法,分为新生代,老年代(即GC次数少和GC次数多的区域)分别使用不同的算法。
- 堆内部结构分为三部分,新生代,老年代和永生代
- 新生代用于存储新对象(edn区域),在经过minorGC之后放入survivor区域,并分为S0和S1区域使用复制算法交替MinorGC。多次GC后进入老年代。
- 老年代用于存放长期使用的对象(缓存,全局变量),老年代空间不足时触发FullGC
- 永久代
- 堆内存的参数有:
- Xms 初始堆大小
- Xmx 最大堆大小 -Xmn 新生代大小
- 调整Eden与Survivor的比例还有MinorGC的晋升次数