Есть ли "жизненный цикл" загруженной библиотеки?
Да, в Java он основан на "загрузчике классов", который выполнил LoadLibrary
.
Таким образом, предполагая, что вы загружаете разделяемую библиотеку в классе с именем X
когда экземпляр X
, который загрузил библиотеку, собран, собран, общая библиотека также удаляется / удаляется из памяти, так как на нее нет ссылок.
Примечание. Помните, что если вы загружаете это вСреда выполнения Java, которая размещается в Xamarin / Mono, и, таким образом, у вас могут быть .Net / Java одноранговые объекты , а для Java в GC этот загрузочный класс, его одноранговый объект .Net должен быть освобожден (ликвидирован).
И действительно ли мне нужно это делать?
Если ваш код не пропускает ни один из одноранговых объектов, среда выполнения Java очистит память, выделенную вашей общей библиотеке, когдаэто возможно.
Примечание. Если использование ваших общих библиотечных функций ограничено, я бы порекомендовал вам изолировать ваш LoadLibrary
с его собственным классом C # / Java.Lang.Objectне используйте его в подклассе приложения или в подклассе действия, чтобы вы могли напрямую управлять его жизненным циклом.
С точки зрения производительности, помните, что за загрузку этой общей библиотеки взимается штраф, поэтому, если ваш шаблон использования приложений используетсядиктует, что вы можете захотеть хранить ссылку на этот загрузчик классов, вместо того, чтобы позволить ему постоянно работать с GC, то есть скорость доступа и потребление памяти, но только вы можете сделать это определение на основе профилирования приложения.