如何为新一代优化垃圾收集?

时间:2014-12-26 08:42:09

标签: java garbage-collection jvm-hotspot

我想加快我的JAVA应用程序,并提出以下问题。 提前谢谢。

1对于HotSpot JVM年轻代,是否可以跳过垃圾回收 (GC) 对于伊甸园中最新分配的对象?例如,我们跳过前30% 伊甸园地区最新的物体。

2如何缩短新一代gc的时间?响应时间 工作流程预计不到10毫秒,但gc的复制过程为 仅新一代需要8毫秒。

3 个答案:

答案 0 :(得分:1)

  

1对于HotSpot JVM年轻代,是否可以跳过eden中最新分配的对象的垃圾收集(gc)?例如,我们跳过伊甸园区域中最新的30%最新对象。

当你清理伊甸园时,它是全有或全无。最新的物体更有可能存在于幸存者的空间中,并在下一个集合中被清理。

  

2如何缩短新一代gc的时间?工作流的响应时间预计小于10毫秒,但仅新一代gc的复制过程需要8毫秒。

JVM不是一个硬实时系统。这意味着即使没有GC,也总有可能暂停10 ms。而不是说10毫秒响应,更现实的目标是具有< 10%99%的时间。这允许一些小的集合。

如果你想真正减少GC暂停时间,你可以;使用Azul Zing,因为它有一个并发的收集器(商业),或者将你产品的垃圾量减少到一天之内的伊甸园尺寸。例如将eden大小设置为24 GB,每小时产生不到1 GB。

答案 1 :(得分:1)

  

如何缩短新一代gc的时间?

  • 确保您使用的是多线程GC算法(ParNew,ParallelScavenge或G1GC)
  • 减少年轻一代的规模
    • 这将导致更频繁但更短的年轻一代GCs和更多促销对象,这意味着更频繁的老一代收藏
    • 可以通过分析应用程序的对象分配和优化热点来降低分配率来应对
  • 为这个问题投入资金:获得更快的CPU /更多内存带宽
  • 投入更多钱:azul zing

答案 2 :(得分:0)

您应优化GC的某些特性,以降低其应用程序性能的开销。与吞吐量和延迟一样,应在长时间运行的测试中观察这些GC特性,以确保应用程序可以在经历多个GC周期时处理流量差异。    1. Stop-the-world收集器暂停应用程序线程以收集垃圾。这些暂停的持续时间和频率不应对应用程序遵守SLA的能力产生不利影响。    2.并发GC算法与CPU周期的应用程序线程竞争。此开销不应影响应用程序吞吐量。   3.非压缩GC算法可能导致堆碎片,这会导致由于完全GC导致的长时间停止停顿。堆碎片应该保持在最低限度。     垃圾收集需要内存才能工作。某些GC算法比其他算法具有更高的内存占用。如果应用程序需要大堆,请确保GC的内存开销不大。   4.如果代码复杂性增加或工作负载特性发生变化,则必须清楚地了解GC日志和常用的JVM参数,以便轻松调整GC行为。

另见:

https://engineering.linkedin.com/garbage-collection/garbage-collection-optimization-high-throughput-and-low-latency-java-applications