Не только обнулять локальную переменную, подобную этой, бессмысленно с точки зрения GC, это может привести к ненужной загрузке переменной в регистр для ее обнуления, что ухудшает ситуацию. Представьте, что между последним чтением или записью в myLocalVar есть 1000 строк кода, а затем вы ссылаетесь на него только для того, чтобы обнулить ссылку. Значение давно ушло из регистра, но вы должны загрузить его обратно в память, чтобы работать с ним.

вынужден добавитьmyLocalVar = null; заявление в предложение наконец перед выходом из метода. Причина в том, чтобы помочь GC. Мне сказали, что я получу SMS-сообщения ночью, когда сервер в следующий раз выйдет из строя, поэтому я лучше сделал это :-).

Я думаю, что это бессмысленно, так как myLocalVar находится в области действия метода и будет «потерян» при выходе из метода. Дополнительный обнуление просто загрязняет код, но безвреден.

Мой вопрос: откуда взялся этот миф о помощи GC? (Меня называли «книгами памяти на Java»). Знаете ли вы какую-нибудь статью «авторитетов», которая объясняет это более подробно? Есть ли вероятность, что это не миф, но действительно как-то помогает? Если да, то как? Может ли обнуление локальных переменных причинить какой-либо вред?

Чтобы уточнить, метод выглядит так:

void method() {
  MyClass myLocalVar = null;
  try {
    myLocalVar = get reference to object;
    ... do more here ...
  } finally {
    if (myLocalVar != null) {
      myLocalVar.close(); // it is resource which we should close
    }

    myLocalVar = null; // THIS IS THE LINE I AM TALKING ABOUT
  }
}

Ответы на вопрос(15)

Ваш ответ на вопрос