7-8垃圾箱分布_您认为有关垃圾收集的7件事-完全错了

7-8垃圾箱分布

关于Java Garbage Collection的最大误解是什么?它的真实情况如何?

小时候,我的父母曾经告诉我,如果我学习不好,我将成为垃圾收集者。 他们几乎不知道,垃圾回收实际上是很棒的。 也许这就是为什么即使在Java世界中,许多开发人员也会误解GC算法:它们如何工作,GC如何影响其应用程序以及您可以对此做些什么。 这就是为什么我们求助 Java性能调优专家Haim Yadid并将Java性能调优指南放到Takipi博客上的原因。

新帖:关于垃圾回收的7件事您以为您知道-完全错了http://t.co/3QJLJuKCRq pic.twitter.com/aqQEF0zTkK

— Takipi(@takipid) 2015年4月6日

由于对性能调优指南的兴趣,在此后续文章中,我们决定收集一些有关垃圾回收的流行观点,并向您展示为什么它们是完全错误的。 以下是前7名:

1.只有一个垃圾收集器

不,并且4也不是正确的答案。 HotSpot JVM总共有4个垃圾收集器: 串行,并行/吞吐量。 CMS,并在块G1上新建一个孩子 。 但是,还有更多,还有非标准的垃圾收集器,还有更多冒险的实现,例如Shenandoah或其他JVM使用的收集器(例如C4, Azul的不间断收集器)。 HotSpot的默认值是并行/吞吐量收集器,通常它不是您的应用程序的最佳选择。 例如,CMS和G1收集器将导致较少的GC暂停。 但是,当出现暂停时,其持续时间很可能会比Parallel收集器引起的持续时间更长。 另一方面,对于相同大小的堆,并行收集器通常可实现更高的吞吐量。

总结:根据您的要求选择合适的垃圾收集器:可接受的GC暂停频率和持续时间。

2.并行=并发

垃圾回收周期可以是STW(紧急停止)并导致GC暂停,也可以并发执行而无需停止应用程序。 当我们更进一步时,GC算法本身可以是串行(单线程)或并行(多线程)的。 这就是为什么当我们提到并发GC时,它不一定意味着它是并行完成的;反之,当我们提到串行GC时,它并不一定意味着它会引起暂停。 在垃圾回收世界中,Concurrent和Parallel是两个绝对不同的术语,其中Concurrent是指GC周期,而Parallel是指GC算法本身。

总结:垃圾回收是一个两步游戏,调用GC周期的方式及其进行业务的方式是两件不同的事情。

3. G1解决了所有问题

G1收集器是Java 7中引入的,并且经过了许多更改和修改,是JVM垃圾收集器的最新成员。 主要优势在于,它解决了CMS收集器常见的碎片问题:GC循环释放旧一代的内存块,并使它看起来像瑞士奶酪,直到一会儿JVM无法处理并不得不停止并停止运行。处理碎片。 但这还不是故事的结局,在某些情况下其他收藏家的表现可能优于G1。 这完全取决于您的要求。

要点:没有所有GC问题的奇迹解决方案,需要进行实验以帮助您为JVM选择正确的收集器。

4.平均交易时间是最重要的指标

如果仅监视服务器中的平均交易时间,那么您会错过异常值。 人们对系统用户的破坏性知之甚少。 例如,通常需要100毫秒以下的事务可能会受到GC暂停的影响,并且需要一分钟才能完成。 如果您只查看平均交易时间,那么除了用户以外的任何人都不会注意到。 现在考虑1%或更多用户的这种情况,您会发现仅查看平均值就可以轻松忽略它。 有关与延迟相关的更多问题以及解决方法,请点击此处查看Gil Tene的博客。

要点:密切注意异常值,了解系统在第99个百分位数( 不是1% )上的表现。

5.降低新的对象分配率将改善GC行为

我们可以将系统中的对象大致分为三类:长期存在的对象,通常对它们我们无能为力,导致最大问题的中期存在的对象,以及通常被释放并导致长期生存的短期对象分配Swift,因此它们在下一个GC周期中消失了。 中度对象是那些注重其分配率可以带来积极结果的对象。 集中精力于短期和长期的对象通常不会被证明是有效的,控制中期对象通常是一项艰巨的任务。

要点:并不是唯一的对象分配速率会限制您的服务器,而是造成所有麻烦的对象类型。

6.调整可以解决所有问题

如果您的应用程序需要保持经常更改的大型状态,那么调整JVM的堆并不会带来太多好处。 GC长时间停顿是不可避免的。 可以在体系结构更改方面提出解决方案,以确保具有关键过程/瓶颈影响响应时间的流程不会包含大状态。 大型状态和响应能力不能很好地结合在一起:将其分解为不同的流程将是解决之道。

总结:并非所有问题都可以通过调整JVM标志来解决,有时您只需要回到绘图板上即可。

7. GC日志会导致大量开销

这是完全不正确的,尤其是默认的日志设置。 数据非常有价值,并且Java 7引入了挂钩来控制它们的大小,并确保它们不会耗尽您的所有硬盘驱动器。 如果您不收集GC日志数据,那么您将失去了解JVM垃圾收集在生产中的行为的唯一途径。 可接受的GC开销通常有5%的上限,要知道系统中的收费GC暂停产生了什么样的费用并将其最小化,付出的代价是很小的。

总结:竭尽所能,在生产中从系统中获取最多的数据。 那里是一个完全不同的世界。

结论

我们希望这些内容能帮助您更好地了解Java中垃圾回收的真正工作方式。 您是否在应用程序中认识到其中一些问题? 您是否遇到其他更常见的垃圾回收错误? 在下面的评论部分让我们知道。

翻译自: https://www.javacodegeeks.com/2015/04/7-things-you-thought-you-knew-about-garbage-collection-and-are-totally-wrong.html

7-8垃圾箱分布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值