我正在调整我的java应用程序的内存参数。我计划将我的伊甸园空间大小减小到最佳值。
我想知道在年轻的GC周期中幸存下来并且已经晋升到终身一代的物体(在年轻一代中创造的)的百分比。你能推荐一款能为我做到这一点的工具吗?
我的假设是,如果目前,让我说我的年轻基因大小是x,并且在年轻的基因周期中存活的对象的百分比是y,并且如果我将年轻基因减少5 GB到x-5并且如果百分比在年轻的基因周期中存活的物体仍然接近y,我可以安全地将我的年轻基因大小减少到x-5。
如果您有相同的输入,请告诉我。
由于
答案 0 :(得分:1)
调整伊甸园空间:
-Xmn
应该是OldGen空间占用率的1倍到1.5倍(如Java Performance中所述)。调整幸存者空间:
-XX:+PrintTenuringDistribution
是必不可少的,这将向您展示终身年龄,-XX:SurvivorRatio=
,-XX:TargetSurvivorRatio=
和-XXMaxTenuringThreshold=
。 答案 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时,您需要一个小于小垃圾收集之间的时间间隔才能使其正确。