JVM KnowLedge Collection
标记清除是JVM用于垃圾回收的基本算法 标记清除算法中,引用会从每个线程栈的桢指向程序的堆 从栈开始,循着指针找到所有可能的引用,然后再循着这些引用递归下去。 当递归完成,就找到了所有活对象,其它都是垃圾。 运行时环境本身也有一个“分配清单(allocation list)”,上面列出了指向每个对象的指针 该列表由垃圾回收器负责维护,并帮助垃圾回收器进行垃圾清理。 因此,运行时环境总是可以找出由它创建但尚未回收的对象。 G1 垃圾回收器针对大内存多核 CPU 的环境,目的在于减少 Full GC 带来的暂停次数,增加吞吐量。 从长远来看,G1 会代替 Concurrent Mark-Sweep Collector(CMS)。 G1 在堆上分配一系列相同大小的连续区域,然后在回收时先扫描所有的区域,按照每块区域内存活对象的大小进行排序,优先处理存活对象小的区域,即垃圾对象最多的区域,这也是 Garbage First 这个名称的由来。 G1 把要收集的区域内的存活对象合并并且复制到其他区域,从而避免了 CMS 遇到的内存碎片问题。 此外,G1 采用了一个可预测暂停时间模型来达到软实时的要求。 参考文献: 可视化Java垃圾回收: http://www.infoq.com/cn/articles/Visualizing-Java-Garbage-Collection