关于垃圾回收被误解的7件事-java开发java经验技巧

关于垃圾回收被误解的7件事-java开发java经验技巧

ID:32832834

大小:57.98 KB

页数:4页

时间:2019-02-16

关于垃圾回收被误解的7件事-java开发java经验技巧_第1页
关于垃圾回收被误解的7件事-java开发java经验技巧_第2页
关于垃圾回收被误解的7件事-java开发java经验技巧_第3页
关于垃圾回收被误解的7件事-java开发java经验技巧_第4页
资源描述:

《关于垃圾回收被误解的7件事-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、关于垃圾回收被误解的7件事-编程开发技术关于垃圾回收被误解的7件事木文由ImportNew・蒋生武翻译自javacodegeekso欢迎加入翻译小组。转载请见文末要求。对Java垃圾回收最大的误解是什么?它实际又是什么样的呢?当我还是小孩的时候,父母常说如果你不好好学习,就只能去扫大街了。但他们不知道的是,清理垃圾实际上是很棒的一件事。可能这也是即使在Java的世界中,同样有很多开发者对GC算法产生误解的原因——包括它们怎样工作、GC是如何影响程序运行和你能对它做些什么。因此我们找到了九腹性能调优专家HaimYadid,并把名为Javaperformancet

2、uningguide的文章发表在Takipi的博客上。最新I■専文:关于垃圾冋收被误解的7件事http://t.co/3QJLJuKCRqhttp://www.importnew.com/pic.twitter.com/aqQEFOzTkK—Takipi(©takipid)April6,2015带着对性能调优指南浓厚的兴趣,我们决定在这篇后续的博文屮收集一些关于垃圾冋收的流行观点,并口指出为什么它们完全是错误的。来看看前7名:1.只有一个垃圾回收器不,并月.4也是错误的答案。HotSpotJVM-共冇4个垃圾回收器:Serial,Parallel/Throug

3、hput.CMS,andthenewkidontheblockGl。别急,另外述有一些非标准的垃圾回收器和更大胆的实现,比如Shenandoah或者其他JVM使用的回收器(C4Azul开发的无停顿回收器)。HotSpot默认使用Parallel/Throughput回收器,但它常常不是你运行程序的最佳选择。比如CMS和G1会使GC停顿(GCpause)发生的频率降低,但是对于每次停顿所花费的时间,很可能比Parallel冋收器更长。另一方面来说,在使用相同大小堆内存的情况下,Parallel冋收器能带来更高的吞吐量。结论:根据你的需求(可接受的GC停顿频率和持

4、续时间)选择合适的垃圾冋收器。1.并行(Parallel)=并发(Concurrent)一个GC周期(GarbageCollectioncycle)可以以STW(Stop-The-World)的形式出现,这会发生一次GC停顿,也可以并发地执行从而无需暂停应用程序。更进一步来讲,GC算法本身可以是串行的(单线程),也可以是并行的(多线程)。因此当我们提到并发的GCI1寸,并不代表它是并行完成的,相反当提到串行GC时,也并不意味着就一定会岀现GC停顿。在GC的世界中,并发和并行是两个完全不同的概念。并发针对的是GC周期,而并行针对GC算法口身。结论:垃圾回收的过程

5、实际上有两步,启动GC周期和GC自身运行,这是不同的两件事。2.G1能解决所有问题经过一系列修止和改进,J3V37中引入了G1回收器,它是JVM垃圾回收器中最新的组件。G1最大的优势就是解决了CMS屮常见的内存碎片问题:GC周期会从老年代(OldGeneration)中释放内存块,结果内存变得像瑞士奶酪那样千疮百孔,直到JVM对其无从下手了,才不得不停下来处理这些碎片。但是故事没这么简单,某些情况下其他回收器可能比G1有更好的表现,这完全取决于你的需求。结论:没有一个奇迹般的回收器能解决所有GC问题,你应该通过具体实验来选择合适的回收器。3.平均事务时间是最需

6、要被关注的指标如杲你仅仅监控服务器的平均事务时间,那么很可能错过一些异常值。这些异常的情况可能对用户来说是毁灭性的,而人们没冇意识到它的重要性。比如一个事务在正常情况下耗时100ms,但受到GC停顿的影响,花了1分钟才完成。除了用户没人会注意到这个问题,因为你只观察了平均事务吋间。试想有1%或者更多的用户经历了这个场景,如果只关注平均值,它就太容易被忽略了。想了解更多和延迟相关的问题和怎样止确处理,可以在这里阅读GilTcnc的博客。结论:留心那些异常值,伤〈可以知道系统最后那1%的状况。(可不是这个1%)4.降低新对象的分配率可以改善GC的运行状况我们可以粗

7、略地把系统中的对象分为三种:长命(long-lived)对象,对它们我们一般做不了什么;中等寿命(mid-lived)对象,最大的问题可能出现在这;短命(short-lived)对彖,它们的释放和回收通常都很快,在下个GC周期来临时就会消失。专注于中等寿命对彖的分配率可以带来有益的结果,这对短命和长命的对象却不是那么有效。另外,控制屮等寿命对象往往是一项怵I难的工作。结论:给服务器带来压力的并不单纯是对彖的分配率,在运行过程屮这些对彖的种类才是一切麻烦的根源。1.调优可以解决所有事如果你的程序需要保存大量被频繁修改的状态,对JVM堆内存进行调优就无法带來很好的

8、收益。较长的GC停顿是不可避免的。一个

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

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

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