[关闭]
@chenxuxiong 2016-05-27T09:04:30.000000Z 字数 2556 阅读 482

垃圾回收判断、垃圾回收算法、GC收集器

JAVA虚拟机


回收算法和分区

复制算法,标记整理,标记清除和分代收集算法
为了提高效率
对堆进行分区,不同分区采用不同的回收算法,其实就是分代收集算法
为了减少回收频率,堆被划分为新生代,老年代和永久代
又可细分为(新生代)eden,survior from,to;老年代 Tenured;永久代Perm
其中比例默认为8:1:1
基于回收次数的不同,新生代采用复制算法,老年代采用标记整理算法。
1. 标记-清除(Mark-Sweep)
第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。它需要暂停整个应用,也会产生内存碎片。
2. 复制(Copying)
把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用对象复制到另外一个区域中。每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去后会进行内存整理,不过出现“碎片”问题。缺点也是很明显的,就是需要两倍内存空间。
3. 标记-整理(Mark-Compact)
此算法结合了 “标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象 “压缩”到堆的其中一块,按顺序排放。此算法避免了“标记-清除”的碎片问题,同时也避免了“复制”算法的空间问题。

垃圾回收判定:

GC类型

垃圾收集器有哪些

常用策略

对象优先分配在Eden。大对象进入老年代。长期存活的对象进入老年代,动态对象年龄判定,空间份额担保

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注