Java老一代不断增长 - 需要帮助解释Java GC输出

时间:2011-07-15 12:08:36

标签: java garbage-collection

我在一个性能关键的服务器端Java应用程序上工作。

一旦系统启动,我预计不会创建长寿命对象 - 只有具有短生命的对象(最多10秒)。因此,我希望调整JVM,以便在系统启动后老一代保持不变。

我想我已经成功,但我不明白为什么(见下文)。

以下是我们的设置:

-Xmx3000m -Xms3000m -verbose:gc -XX:+ PrintGCTimeStamps -XX:+ PrintGCDetails -XX:+ UseConcMarkSweepGC -XX:SurvivorRatio = 5 -XX:TargetSurvivorRatio = 90 -XX:MaxTenuringThreshold = 31 -XX:+ PrintTenuringDistribution - XX:NewSize = 1250m -XX:MaxNewSize = 1250m

我们正在使用Oracle的Java 1.6。

我对“PrintTenuringDistribution”标志的输出感到困惑。我看到这样的输出:

893.866: [GC 893.866: [ParNew
Desired survivor size 168512712 bytes, new threshold 16 (max 31)
- age   1:   13251072 bytes,   13251072 total
- age   2:    1135456 bytes,   14386528 total
- age   3:      59104 bytes,   14445632 total
- age   4:     467384 bytes,   14913016 total
- age   5:      68688 bytes,   14981704 total
- age   6:      43336 bytes,   15025040 total
- age   7:      41344 bytes,   15066384 total
- age   8:       6872 bytes,   15073256 total
- age   9:      87568 bytes,   15160824 total
- age  10:      23840 bytes,   15184664 total
- age  11:      99712 bytes,   15284376 total
- age  12:       5224 bytes,   15289600 total
- age  13:       1000 bytes,   15290600 total
- age  14:      59056 bytes,   15349656 total
- age  15:   65225584 bytes,   80575240 total
: 1015468K->95478K(1097152K), 0.0268070 secs] 1387738K->467748K(2889152K), 0.0269910 secs] [Times: user=0.31 sys=0.00, real=0.03 secs]
899.179: [GC 899.180: [ParNew
Desired survivor size 168512712 bytes, new threshold 16 (max 31)
- age   1:   12438336 bytes,   12438336 total
- age   2:    1531984 bytes,   13970320 total
- age   3:      87920 bytes,   14058240 total
- age   4:      58824 bytes,   14117064 total
- age   5:     463368 bytes,   14580432 total
- age   6:      68688 bytes,   14649120 total
- age   7:      43336 bytes,   14692456 total
- age   8:      40136 bytes,   14732592 total
- age   9:       6872 bytes,   14739464 total
- age  10:      87568 bytes,   14827032 total
- age  11:      23840 bytes,   14850872 total
- age  12:      99712 bytes,   14950584 total
- age  13:       2896 bytes,   14953480 total
- age  14:       1000 bytes,   14954480 total
- age  15:   65282456 bytes,   80236936 total
: 1009782K->98799K(1097152K), 0.0383370 secs] 1382052K->471069K(2889152K), 0.0385490 secs] [Times: user=0.36 sys=0.00, real=0.03 secs]

鉴于我有很多年龄= 15且阈值为16的对象,我希望GC中的每个对象都可以(a)升级到旧代,或者(b)收集垃圾。

但根据JConsole,我的老一代并没有增加。那么所有这些对象发生了什么?

1 个答案:

答案 0 :(得分:1)

你拥有的年龄是幸存者空间中的物体。由于你有一个大的伊甸园空间,大多数进入幸存者空间的物体都会相对较老。