Вы должны проверить свой код.
Операция GC запускает операцию STW (Stop The World), которая блокирует все потоки, созданные в вашем коде. Но STW не влияет на состояние выполнения кода.
Но gc повлияет на логику вашего кода, если вы будете использовать System.currentTimeMillis
для управления логикой выполнения кода.
Операция gc также повлияет на ненадежную ссылку, если вы используете WeakReference, SoftReference, WeakHashMap, после полного gc эти компоненты могут изменить свое поведение.
Выполнена полная операция gc, и освобожденная память не позволяет вашему коду выделять новый объект, ваш код выдаст исключение OutOfMembryException, которое прервет выполнение вашего кода.
Я думаю, что вы должны сделать сейчас:
Сначала проверьте 'GC Cause', чтобы определить, произошел ли полный вызов gc в System.gc()
call или Allocate failed
.
Тогда, если GC Cause равно System.gc()
, вам следует проверить ненадежную ссылку, используемую в вашем коде.
Наконец, если причиной GC является Allocate failed
, вы должны проверить свой журнал, чтобы определить, произошла ли в вашем коде OutOfMembryException
, если случится, вы должны выделить больше памяти, чтобы избежать OutOfMembryException
.
В качестве подсказки НЕ СЛЕДУЕТ хранить сообщение mq в памяти приложения микросервиса. В большинстве случаев источником проблемы с gc является плохая практика в вашем коде.