天津网站建设招标,莆田网站开发,做旅游的网站在哪里做,微网站建设教学关于Java垃圾收集的最大误解是什么#xff0c;它的真实情况如何#xff1f; 小时候#xff0c;我的父母曾经告诉我#xff0c;如果我学习不好#xff0c;我将成为垃圾收集者。 他们所知道的很少#xff0c;垃圾回收实际上很棒。 也许这就是为什么即使在Java世界中#… 关于Java垃圾收集的最大误解是什么它的真实情况如何 小时候我的父母曾经告诉我如果我学习不好我将成为垃圾收集者。 他们所知道的很少垃圾回收实际上很棒。 也许这就是为什么即使在Java世界中许多开发人员也会误解GC算法它们如何工作GC如何影响其应用程序以及您可以对此做些什么。 这就是为什么我们求助 Java性能调优专家Haim Yadid并将Java性能调优指南放到Takipi博客上的原因。 新帖关于垃圾回收的7件事您以为您知道-完全错了http://t.co/3QJLJuKCRq pic.twitter.com/aqQEF0zTkK — Takipitakipid 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