- Я запускаю серверное приложение, используя JVM
sunjava-1.6.0_21
. - Мое приложение содержит большие объемы данных и действует как кеш-сервер. Таким образом, он хранит много долгоживущих данных, которые мы не ожидаем получить GC во время работы приложения.
- Я устанавливаю следующие параметры JVM
-Xmx16384M
и-Xms16384M
. - После того, как необходимые данные были загружены, ниже показано использование памяти приложением.
- Общий объем кучи:
13969522688
- Максимальное пространство кучи:
15271002112
- Свободное место в куче:
3031718040
- Долгосрочное хранилище кучи (старого поколения):
Used=10426MB Max=10922MB Used/Max=95%
Использование старого поколения — я подтвердил, что это связано с фактическими данными и не ожидается, что оно будет бесплатным. Мой вопрос заключается в том, что по умолчанию JVM определяет размер кучи (она выделяет 10922 МБ старого поколения), что оставляет очень мало свободного места в разделе старого поколения.
- Может ли меньше свободного места в старом поколении повлиять на приложение?
- Если да, то как мне с этим справиться? Должен ли я экспериментировать с параметрами настройки JVM, такими как
newratio
, и пытаться увеличить пространство, доступное для старого поколения, или любым другим способом, которым я должен настроить приложение.