Каждый новичок знает, что Java делает половину работы за разработчика, в том числе собирает мусор. Очень удобно, не правда ли? Но что, если сборка мусора начинает занимать много времени и к тому же запускается очень часто? Вашему вниманию предоставляется реальный пример оптимизации потребления памяти JVM.
Презентация подготовлена по материалам выступления Евгения Берлога на витебской конференции “Developer's Software Conference” (12.11.2016).
26. 26
ADAPTIVE SIZE POLICY – это попытка
JVM реорганизовать память с целью достичь
(#1) уменьшения GC паузы;
(#2) увеличения пропускной способности;
(#3) уменьшения footprint’а.
-XX:AdaptiveSizePolicyOutputInterval=1
27. 27
ЛОГИ GC С ВКЛЮЧЕННЫМ ASP
UseAdaptiveSizePolicy actions to meet *** reduced footprint ***
GC overhead (%)
Young generation: 1.26 (attempted to shrink)
Tenured generation: 0.00 (no change)
Tenuring threshold: (attempted to decrease to balance GC costs) = 2
dsc2016
28. 28
ЛОГИ GC С ВКЛЮЧЕННЫМ ASP
UseAdaptiveSizePolicy actions to meet *** reduced footprint ***
GC overhead (%)
Young generation: 1.26 (attempted to shrink)
Tenured generation: 0.00 (no change)
Tenuring threshold: (attempted to decrease to balance GC costs) = 2
dsc2016
35. # Выключаем Adaptive Size Policy
# Уменьшаем Old Generation
# Максимум на Eden
# Экспериментально высчитываем Survivor Size
35
Эксперимент #2:
Дальше не по правилам
42. 42
Concurrent Mark Sweep (CMS) Collector
# То же распределение регионов, что и в Parallel
# Тот же алгоритм, что и в Parallel для младшего
поколения
# Часть работы в старшем поколении
выполняется параллельно
# Больше footprint, чем в Parallel
47. 47
dsc2016
: 1460888K->10522K(1595776K), 0.0049030 secs] 1697910K->247592K(2210176K),
0.0049871 secs]
1195.459: [GC1195.459: [ParNew
Desired survivor size 74252288 bytes, new threshold 15 (max 15)
- age 1: 690016 bytes, 690016 total
- age 2: 148448 bytes, 838464 total
- age 3: 751056 bytes, 1589520 total
...
- age 13: 82512 bytes, 3801784 total
- age 14: 607816 bytes, 4409600 total
- age 15: 1348728 bytes, 5758328 total
Анализ логов CMS
48. ...
- age 13: 82512 bytes, 3801784 total
- age 14: 607816 bytes, 4409600 total
- age 15: 1348728 bytes, 5758328 total
15299.307: [GC [1 CMS-initial-mark: 581268K(839680K)] 1241313K(4142080K),
0.2830091 secs]
15306.520: [GC[YG occupancy: 1031447 K (3302400 K)]15306.520: [Rescan
(parallel) , 0.2487740 secs]15306.769: [weak refs processing, 0.0012183
secs]15306.770: [scrub string table, 0.0012292 secs] [1 CMS-remark:
581268K(839680K)] 1612715K(4142080K), 0.2518813 secs]
49. ...
- age 13: 82512 bytes, 3801784 total
- age 14: 607816 bytes, 4409600 total
- age 15: 1348728 bytes, 5758328 total
15299.307: [GC [1 CMS-initial-mark: 581268K(839680K)] 1241313K(4142080K),
0.2830091 secs]
15306.520: [GC[YG occupancy: 1031447 K (3302400 K)]15306.520: [Rescan
(parallel) , 0.2487740 secs]15306.769: [weak refs processing, 0.0012183
secs]15306.770: [scrub string table, 0.0012292 secs] [1 CMS-remark:
581268K(839680K)] 1612715K(4142080K), 0.2518813 secs]