在年轻的GC中幸存下来的物体的百分比?

时间:2013-03-11 09:16:42

标签: java garbage-collection performance

我正在调整我的java应用程序的内存参数。我计划将我的伊甸园空间大小减小到最佳值。

我想知道在年轻的GC周期中幸存下来并且已经晋升到终身一代的物体(在年轻一代中创造的)的百分比。你能推荐一款能为我做到这一点的工具吗?

我的假设是,如果目前,让我说我的年轻基因大小是x,并且在年轻的基因周期中存活的对象的百分比是y,并且如果我将年轻基因减少5 GB到x-5并且如果百分比在年轻的基因周期中存活的物体仍然接近y,我可以安全地将我的年轻基因大小减少到x-5。

如果您有相同的输入,请告诉我。

由于

3 个答案:

答案 0 :(得分:1)

调整伊甸园空间

  • 您需要计算分配率(请参阅Advanced JVM Tuning)以确定您的Eden Space的大小。
  • 此外,完整GC后,总年轻代 -Xmn应该是OldGen空间占用率的1倍到1.5倍(如Java Performance中所述)。

调整幸存者空间

  • 您需要观看促销率(再次参阅Advanced JVM Tuning),这样您就不会通过减少幸存者/伊甸园空间来使FullGC过于频繁,
  • -XX:+PrintTenuringDistribution是必不可少的,这将向您展示终身年龄
  • 实际调整幸存者大小需要
  • -XX:SurvivorRatio=-XX:TargetSurvivorRatio=-XXMaxTenuringThreshold=
  • 有关详细信息,请参阅Request for documentation of -XX:+PrintTenuringDistribution output

答案 1 :(得分:0)

我喜欢jClarity,但它是一种商业工具,但我相信它们确实有试用期。还有一些开源项目,例如https://code.google.com/p/gclogviewer/

要使这些gc日志查看器正常工作,您需要一些GC日志来指向它们。在启动时,从命令行将以下符文传递给JVM。 PrintTenuringDistribution是您需要告诉您有关终身流程的关键部分。

-Xloggc:gc.log 
-XX:+PrintGCDetails
-XX:+PrintTenuringDistribution

答案 2 :(得分:0)

我最近一直在测试这个问题。我已将jstat与-gc参数一起使用,并在其输出中使用了一个脚本来获取数字。

通常,每次在Eden上进行垃圾回收时,脚本都会通过输出并对Eden Capacity(EC)求和。最后减去最初的Eden Used(EU)并在最后添加EU。 Tenured / Old空间也是如此。然后生活在Tenured上的物体的百分比是使用的Tenured Generation Space总数除以使用的总Eden Space。

它需要一些编码,但如果您需要稍后进行此类分析,则可以轻松重复使用。请记住,在使用jstat时,您需要一个小于小垃圾收集之间的时间间隔才能使其正确。