Статические поля открыты для сборки "мусора"?

Я бы предположил, что это связано с тем, что некоторые из этих библиотек зависят от других библиотек, и если они еще не были связаны, вы получите ошибки компоновщика.

88
задан Michael Deardeuff 17 January 2009 в 09:12
поделиться

4 ответа

Статические переменные не могут быть избраны для сборки "мусора", в то время как класс загружается. Они могут быть собраны, когда соответствующий загрузчик класса (который был ответственен за загрузку этого класса) самостоятельно собран для мусора.

Выезд Раздел JLS 12.7 Разгрузок Классов и Интерфейсов

класс А или интерфейс могут быть разгружены, если и только если его загрузчик класса определения может быть исправлен сборщиком "мусора" [...], Классы и интерфейсы, загруженные программой начальной загрузки, не могут быть разгружены.

107
ответ дан Sergey Maksimenko 5 November 2019 в 15:06
поделиться

Если Вы хотите, чтобы временный объект использовался для статической инициализации, от которой тогда избавляются, можно использовать статический блок инициализатора, например,

class MyUtils {
   static
   {
      MyObject myObject = new MyObject();
      doStuff(myObject, params);
   }

   static boolean doStuff(MyObject myObject, Params... params) {
       // do stuff with myObject and params...
   }
}

, так как статический блок инициализатора является специальным видом статического метода, myObject является локальной переменной и может быть собран "мусор" после того, как блок заканчивает выполняться.

13
ответ дан finnw 5 November 2019 в 15:06
поделиться

На статические переменные ссылаются Объекты класса, на которые ссылается ClassLoaders - поэтому, если любой, ClassLoder отбрасывает Класс так или иначе (если это даже возможно) или сам ClassLoder не становится имеющим право на набор (более вероятно - думают о разгрузке веб-приложений) статические переменные (или скорее объекты, на которые они ссылаются) не будет собран.

50
ответ дан Jon Skeet 5 November 2019 в 15:06
поделиться

Я думаю , это отвечает на Ваш вопрос - в основном не, если класс не прибывает из специального загрузчика класса, и это разгружает класс.

7
ответ дан Community 5 November 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: