垃圾回收GC
垃圾回收器:java堆和方法区的内存
判断对象是否活着的算法:引用计数算法,可达性分析算法
引用:强引用,软引用,弱引用,虚引用
垃圾收集算法:
标记-清除算法:最基础的算法,问题1:效率问题,2,,空间问题,会产生大量不连续的内存碎片
复制算法:将内存分为两份,一块用完,活着的对象复制到另一块,使用过的内存清理掉
Eden,From Survivor,To Survivor(8:1:1) 分配担保机制 ToSurvivor内存不够,直接进入老年代
标记-整理算法:让所有存活对象向一端移动,然后直接清理掉端边界以外的内存
分代收集算法:将java堆分为新生代,老年代,新生代有大批对象死去,选用‘复制算法’,老年代对象存活率高,没有额外空间进行分配担保,必须使用‘标记-清理或’者‘标记整理’算法进行回收。
HotSpot的算法实现:枚举根节点,从GC Roots节点找引用链,
可达性分析时GC会Stop The World,
安全点Safepoint,安全区域Sate Region 确保引用关系不会发生变化
垃圾收集器:Serial 新生代,ParNew 多线程新生代,Patallel Scavenge 控制吞吐量,自适应调节策略
Serial Old 老年代 Parallel Old 多线程老年代 CMS 最短停顿时间