JVM KnowLedge Collection

只谈情不闲聊 提交于 2019-12-06 18:57:26

标记清除是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

    Visualizing-Java-GC: http://www.infoq.com/presentations/Visualizing-Java-GC

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!