“垃圾收集率”是什么意思,它可以提供什么好处?

时间:2009-12-21 05:43:46

标签: java performance garbage-collection

在分析Java GC行为时,某些工具的度量标准为“垃圾回收率”(例如图19中的http://www.ibm.com/developerworks/java/library/j-ibmtools2/#fig19),其单位为MB /秒。

与GC等利用率相比,这是一个很少的指标。它看起来像是表示GC清理速度有多快。但它能提供任何好处吗?或者应该如何最好地分析?

4 个答案:

答案 0 :(得分:1)

您可以在性能分析中找到它spot some causes of JVM slowdown (提取,强调我的)

  

按发电划分的垃圾收集率   请记住,太阳队的JVM(1.3+)是世代,根据对象'年龄',堆被分为'年轻一代'和'老一代'。   默认情况下,使用两种不同的GC算法来管理两代中的每一代;

     
      
  • 年轻一代使用复制收集器和
  •   
  • 旧一代使用Mark Compact Collector。
  •   
     

本博客中提到的这些和其他GC算法的细节可以在Sun的优秀Turbo-charging Java HotSpot Virtual Machine文章中找到。

alt text
(来源:decaresystems.ie

  

[...]我们如何判断Old Generation GC活动对应用程序的影响有多大?   好吧,如果我们将现在知道的数据与另一个PerformaSure图表相关联,在GC Overhead图表中,我们可以确定GC活动增加的影响。

     

我们可以清楚地看到开销随着旧一代GC率的增加而增加,最终达到100%的开销水平。
  参考活动会话计数图,我们可以看到GC活动的增加和相关的开销实际上与另一个用户社区即将上线相关,将活动会话的并发数量从大约200增加到250并且取决于环境和工作负载,有时300个会议。

答案 1 :(得分:1)

是的,如果您的目标是扩展以支持并行支持多个用户,那么查看垃圾回收率是有意义的。

使用单位Mbyte /秒通常不是很有帮助。

我通常建议每个用户互动时尝试保持在10 MB以下。

您需要小心谨慎,尽量不要将Garbage最小化,因为通过这样做可能会限制并发性。 马库斯(http://kohlerm.blogspot.com/

答案 2 :(得分:0)

因为它是MB /秒,我猜它意味着“每秒垃圾收集运行释放的MB内存”。

至于它有多有意义:您链接的图表还提供“垃圾收集数量”和“平均垃圾收集暂停[ms]”。您应该一起查看所有这些数字,以确定是否存在问题。

如果您使用了大量“临时”对象(以便可以释放大块),那么该指标本身可能只显示。如果你有很多暂停和集合运行,但只有相对较少的MB释放,你就会达到内存容量,需要增加更多内存或减少你的消耗。

答案 3 :(得分:0)

除了明确使用此度量标准来理解程序的短期对象使用情况之外,大多数具有此度量标准的工具,垃圾收集率(MB /秒),都将其用作衡量应用程序执行情况的方法。

所做的假设是,无论生成的垃圾是否等于生成的垃圾,这也表示应用程序的运行情况(运行效率越高,生成垃圾的速度越快)。通常这些工具会比较来自不同版本程序的指标,以确定哪些运行效率更高(数字越大越好)。

典型的使用场景是比较代码修复之前/之后的数量。如果数字上升,通常(你知道,并非总是)意味着更好。