Старое поколение Java продолжает расти - нужна помощь интерпретация выходных данных Java GC

Я работаю над серверным 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 = 1250 м -XX: MaxNewSize = 1250 м

.

Меня действительно смущает вывод флага "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, я бы ожидал, что каждый объект в сборке мусора либо (а) будет переведен в старое поколение, либо ( б) сборщик мусора.

Но согласно JConsole мое старое поколение не увеличивается. Так что же происходит со всеми этими объектами?

9
задан Phil Harvey 15 July 2011 в 01:08
поделиться