Я бы предположил, что это связано с тем, что некоторые из этих библиотек зависят от других библиотек, и если они еще не были связаны, вы получите ошибки компоновщика.
Статические переменные не могут быть избраны для сборки "мусора", в то время как класс загружается. Они могут быть собраны, когда соответствующий загрузчик класса (который был ответственен за загрузку этого класса) самостоятельно собран для мусора.
Выезд Раздел JLS 12.7 Разгрузок Классов и Интерфейсов
класс А или интерфейс могут быть разгружены, если и только если его загрузчик класса определения может быть исправлен сборщиком "мусора" [...], Классы и интерфейсы, загруженные программой начальной загрузки, не могут быть разгружены.
Если Вы хотите, чтобы временный объект использовался для статической инициализации, от которой тогда избавляются, можно использовать статический блок инициализатора, например,
class MyUtils {
static
{
MyObject myObject = new MyObject();
doStuff(myObject, params);
}
static boolean doStuff(MyObject myObject, Params... params) {
// do stuff with myObject and params...
}
}
, так как статический блок инициализатора является специальным видом статического метода, myObject является локальной переменной и может быть собран "мусор" после того, как блок заканчивает выполняться.
На статические переменные ссылаются Объекты класса, на которые ссылается ClassLoaders - поэтому, если любой, ClassLoder отбрасывает Класс так или иначе (если это даже возможно) или сам ClassLoder не становится имеющим право на набор (более вероятно - думают о разгрузке веб-приложений) статические переменные (или скорее объекты, на которые они ссылаются) не будет собран.
Я думаю , это отвечает на Ваш вопрос - в основном не, если класс не прибывает из специального загрузчика класса, и это разгружает класс.