Не только обнулять локальную переменную, подобную этой, бессмысленно с точки зрения 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
}
}