В моем приложении я использую ServiceLoader для загрузки модулей (классов из .jar-файла) с различными ClassLoaders, чтобы полностью выгружать их, когда это не нужно, из контекста приложения и из самой JVM. Я знаю, что, возможно, это не обычная тема "выгрузить классы из JVM", для этого есть некоторые условия, поэтому я прилагаю необходимые усилия. Чтобы убедиться, что все работает так, как ожидалось, я отслеживаю загрузку и выгрузку классов с помощью -XX: + TraceClassLoading и -XX: + TraceClassUnloading, информация из этих параметров показывает мне, что я могу выполнить полную выгрузку любого модуля из mi app и из самой JVM (выгрузка из JVM происходит во время полного GC). Кажется, все это работает нормально ... но мой вопрос заключается в том, почему файлы .jar, из которых были загружены классы модулей, остаются открытыми с помощью JVM ?, что .jars не может быть удален, но JVM говорит, что выгрузил классы из них , Очевидно, это происходит во время выполнения JVM, но зачем держать эти файлы .jar открытыми, если в JVM не загружен класс из них ?, есть что-то, что я могу сделать, чтобы заставить JVM освободить эти файлы .jar?