Почему -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

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