#java #performance #garbage-collection #jvm #permanent-generation
#java #Производительность #сборка мусора #jvm #постоянная генерация
Вопрос:
Привет: У меня есть многопоточное Java-приложение. Существует много временных объектов.
-XX:MaxTenuringThreshold=1
мы указываем вышеуказанный параметр при запуске JVM. Это означает, что все объекты будут сохраняться один раз во время gc, затем они будут переведены в старое поколение. Не могли бы мы использовать это -XX:MaxTenuringThreshold=10
, например, чтобы объект был переведен в старое поколение JVM после 10-кратного gc. Но приведет ли это к ненужной операции копирования во время young gc (поскольку объекты копируются ‘из ‘eden’ в ‘from’, из ‘from’ в ‘to’, ‘from’, ‘to’ — это два буфера выживания)?
Вопросы могут также означать, что если а) в молодом поколении выполняется многократное копирование, в gc старого поколения меньше, б) длительная сборка мусора старого поколения, но мало копий молодого поколения, какой из них лучше для хорошей производительности?
Ответ №1:
Какой из них «лучше для хорошей производительности», во многом зависит от вашего приложения и условий, в которых оно работает. Ваша лучшая надежда — попробовать различные варианты сборки мусора, а затем выполнить профилирование среды выполнения и памяти, чтобы получить наилучший компромисс между использованием памяти и скоростью.
К сожалению, нет серебряной пули для настройки сборки мусора.