jvm调优总结(6):新一代的垃圾回收算法-java开发java经验技巧

jvm调优总结(6):新一代的垃圾回收算法-java开发java经验技巧

ID:31317350

大小:72.00 KB

页数:4页

时间:2019-01-08

jvm调优总结(6):新一代的垃圾回收算法-java开发java经验技巧_第1页
jvm调优总结(6):新一代的垃圾回收算法-java开发java经验技巧_第2页
jvm调优总结(6):新一代的垃圾回收算法-java开发java经验技巧_第3页
jvm调优总结(6):新一代的垃圾回收算法-java开发java经验技巧_第4页
资源描述:

《jvm调优总结(6):新一代的垃圾回收算法-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、JVM调优总结(6):新一代的垃圾回收算法-编程开发技术JVM调优总结(6):新一代的垃圾回收算法原文出处:pengjiaheng垃圾回收的瓶颈传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是FullGC所带来的应用暂停。在一•些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在儿百甚至儿十毫秒以内,如果分代垃圾冋收方式要达到这个指标,只能把最大堆的设置限制在一个相对较小范围内,但是这样有限制了应用木身的处理能

2、力,同样也是不可接收的。分代垃圾回收方式确实也考虑了实时性要求而提供了并发回收器,支持最大暂停时间的设置,但是受限于分代垃圾回收的内存划分模型,其效果也不是很理想。为了达到实时性的要求(其实Java语言最初的设计也是在嵌入式系统上的),一种新垃圾回收方式呼之欲出,它既支持短的暂停吋间,又支持大的内存空间分配。可以很好的解决传统分代方式带來的问题。增量收集的演进增量收集的方式在理论上可以解决传统分代方式带来的问题。增量收集把对堆空间划分成一系列内存块,使用吋,先使用其屮一部分(不会全部用完),垃圾收集时把之前用掉的部分中的存活对象再放到后面没冇用的空间中,这

3、样可以实现一直边使用边收集的效果,避免了传统分代方式整个使用完了再暂停的回收的情况。当然,传统分代收集方式也提供了并发收集,但是他有一个很致命的地方,就是把整个堆做为一个内存块,这样一方面会造成碎片(无法压缩),另一方面他的每次收集都是对整个堆的收集,无法进行选择,在暂停时间的控制上还是很弱。而增量方式,通过内存空间的分块,恰恰可以解决上面问题。GarbageFirest(Gl)这部分的内容主要参考这里,这篇文章算是对G1算法论文的解读。我也没加什么东西了。目标从设计口标看G1完全是为了大型应用而准备的。支持很大的堆高吞吐量-支持多CPU和垃圾回收线程-在

4、主线程暂停的情况下,使用并行收集■在主线程运行的情况下,使用并发收集实时目标:可配置在N毫秒内最多只占用M毫秒的时间进行垃圾回收当然G1要达到实时性的要求,相对传统的分代回收算法,在性能上会冇一些损失。算法详解G1可谓I■専采众家之长,力求到达一种完美。他吸取了增量收集优点,把整个堆划分为一个一个等大小的区域(region)。内存的冋收和划分都以region为单位;同吋,他也吸取了CMS的特点,把这个垃圾回收过程分为几个阶段,分散一个垃圾回收过程;而且,G1也认同分代垃圾回收的思想,认为不同对象的生命周期不同,可以采取不同收集方式,因此,它也支持分代的垃圾

5、回收。为了达到对冋收时间的可预计性,G1在扫描了region以后,对其中的活跃对彖的大小进行排序,首先会收集那些活跃对象小的region,以便快速回收空间(要复制的活跃对象少了),因为活跃对象小,里面可以认为多数都是垃圾,所以这种方式被称为GarbageFirst(G1)的垃圾回收算法,即:垃圾优先的回收。回收步骤:初始标记(InitialMarking)G1对于每个region都保存了两个标识用的bitmap,一个为previousmarkingbitmap,一个为nextmarkingbitmap,bitmap中包含了一个bit的地址信息來指向对象的起

6、始点。开始InitialMarking之前,首先并发的清空nextmarkingbitmap,然后停止所有应用线程,并扫描标识出每个region中root可直接访问到的对象,将region屮top的值放入nexttopatmarkstart(TAMS)屮,Z后恢复所冇应用线程。触发这个步骤执行的条件为:???G1定义了一个JVMHeap大小的百分比的阀值,称为h,另外还有一个H,H的值为(l-h)*HeapSize,目前这个h的值是固定的,后续G1也许会将其改为动态的,根据jvm的运行情况来动态的调整,在分代方式下,G1还定义了一个u以及softlimit

7、,softlimit的值为H-u*HeapSize,当Heap中使用的内存超过了softlimit值时,就会在一次cleanup执行完毕后在应用允许的GC暂停时间范围内尽快的执行此步骤;在pure方式卜,G1将marking与cleanup组成一个环,以便cleanup能充分的使用marking的信息,当cleanup开始冋收时,首先冋收能够带来最多内存空间的regions,当经过多次的cleanup,回收到没多少空间的regions时,G1重新初始化一个新的marking与cleanup构成的环。?并发标记(ConcurrentMarking)按照之前I

8、nitialMarking扫描到的对象进行遍历,以识别这些对象的下

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。