Я столкнулся с проблемами, убедившись, что контекст приложения Spring, который я уничтожаю, полностью исчез, и не могу видеть объект, собираемый мусором. Когда я смотрю на экземпляр в VisualVM, я вижу, что существует ряд незавершенных ссылок как на контекст, так и на его фабрику компонентов, которые остаются после закрытия и уничтожения контекста. Все это должно быть связано с первоначальной настройкой фабрики компонентов (во время метода обновления AbstractApplicationContext), которая регистрирует фабрику компонентов и контекст с различными постпроцессорами компонентов и т. д.
Похоже, что в фабрике компонентов или в контекстах приложений (даже обновляемых) нет никаких методов, которые делают что-то большее, чем удаление ссылки самого низкого уровня на фабрику компонентов. В результате возникает утечка памяти, что в некоторых случаях препятствует чистому воссозданию контекста.
Я спрашиваю, поскольку программное обеспечение, над которым я работаю в данный момент, может динамически создавать/уничтожать, а затем воссоздавать контекст (поскольку модули динамически загружаются и выгружаются), а оставшиеся элементы контекста и bean factory вызывают проблемы с такими компонентами, как как spring-data-jpa (особенно прокси, который связывает интерфейсы репозитория с реализациями репозитория).
Кто-нибудь знает способ, с помощью которого я могу чисто и полностью удалить контекст и фабрику компонентов без необходимости полностью закрывать виртуальную машину, которая изначально ее создала?