Почему -XX:+ExplicitGCInvokesConcurrent не используется по умолчанию при использовании сборщика G1?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему -XX:+ExplicitGCInvokesConcurrent не используется по умолчанию при использовании сборщика G1?

Сообщение Anonymous »

В контексте базы данных в памяти мы используем память вне кучи в сочетании со сборщиком горячей точки G1.

Однако, когда использование памяти вне кучи достигает MaxDirectMemorySize, полный сборщик мусора запускается кодом JDK с использованием System.gc(). Это вызывает долгую и болезненную остановку мирового GC, который также, похоже, помещает весь текущий живой набор в старое поколение, минуя выживший (и, таким образом, увеличивая проблемы кумовства). Этого не происходит при установке -XX:+ExplicitGCInvokesConcurrent: сборщик мусора работает намного быстрее и уважает оставшиеся в живых.

Поскольку System.gc() используется внутри JDK, почему эта опция не включена по умолчанию в горячей точке? Вызывает ли этот флаг теоретические или практические проблемы? Или это просто из соображений совместимости? Есть ли у кого-нибудь опыт использования этой опции в производственной среде и возникали ли с ней проблемы?

Подробнее здесь: https://stackoverflow.com/questions/338 ... g1-collect
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»