Java старого поколения продолжает расти - нужна помощь в интерпретации вывода Java GC - PullRequest
9 голосов
/ 15 июля 2011

Я работаю над критичным к производительности серверным Java-приложением.

Как только система запустится, я не ожидаю создания долгоживущих объектов - только объекты с коротким сроком службы (до 10 секунд).Поэтому я хочу настроить JVM так, чтобы старое поколение было постоянным после запуска системы.

Я думаю, что мне это удалось, но я не понимаю почему (см. Ниже).

Вот наши настройки:

-Xmx3000m -Xms3000m -verbose: gc -XX: + PrintGCTimeStamps -XX: + PrintGCDetails -XX: + UseConcMarkSweepGC -XX: SurvivorRatio = 5 -XX: TargetSurvivorRatio = 90 -XX: MaxTenuringThreshold = 31 -XX: + PrintTenuringDistribution -XX50: 12XX: NewSize1009 *

Мы используем 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 либо (а) будет повышен вСтарое поколение, или (б) мусор собрал.

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

1 Ответ

1 голос
/ 15 июля 2011

Возраст у вас есть для объектов в пространстве выживших. Поскольку у вас большое пространство рая, большинство объектов, попадающих в пространство выживших, будут относительно старыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...