Присвоение “пустого указателя” к объектам в каждом приложении после их использования

Если Вы все еще получаете ту страницу, вероятно, что это аварийно завершается прежде, чем закончить сеть. Конфигурация

Удостоверяется, что ASP.NET имеет полномочия, в которых это нуждается к вещам как.Net папки Framework, Метабаза IIS, и т.д. у Вас есть какой-либо способ проверить, что ASP.NET установлен правильно и связан в IIS правильно?

Редактирование: После комментария Greg это произошло со мной, я предположил, что то, что Вы отправили, было Вашим всем очень минимальным web.config, есть ли больше к нему? Раз так можно ли отправить весь web.config?

6
задан BalusC 4 December 2009 в 18:04
поделиться

14 ответов

  • нет, не делайте этого, за исключением особых случаев, таких как статические поля или когда вы знаете , что переменная / поле живет на много дольше чем код, ссылающийся на него
  • да, но с практическим знанием ограничений вашей виртуальной машины (и того, как вызвать случайное удержание блоков памяти)
  • н / д
8
ответ дан 8 December 2019 в 02:35
поделиться

Был класс ошибок утечки памяти, которые происходили независимо от того, установил ли я для ссылки значение null - если библиотека, которую я использовал, была написана на таком языке, как C, без управления памятью, тогда просто установив обнуление объекта не обязательно освобождает память. Нам пришлось вызвать метод close () объекта, чтобы освободить память (что, конечно, мы не могли сделать после установки значения null.)

Мне кажется, что де-факто метод управления памятью в java полагаться на сборщик мусора, если используемый вами объект / библиотека не имеет метода close () (или чего-то подобного).

0
ответ дан 8 December 2019 в 02:35
поделиться

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

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

Так что, если вы склонны использовать переменные там, где вы не должны не использовать переменные, это может упростить отладку кода.

0
ответ дан 8 December 2019 в 02:35
поделиться

Я назначаю ссылку на null только тогда, когда:

  1. Код действительно находится в критически важной для памяти части.
  2. Ссылка имеет широкую область применения (и необходимо повторно использовать позже). Если это не так, я просто объявляю это в минимально возможном блоке кода. Он будет доступен для сбора автоматически.

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

В этом случае (и только в этом случае) я затем вызываю System.gc () , чтобы дать подсказку сборщику мусора.

1
ответ дан 8 December 2019 в 02:35
поделиться

Я не думаю, что при использовании .Net есть необходимость устанавливать для объекта значение null. Просто позвольте сборке мусора произойти.

0
ответ дан 8 December 2019 в 02:35
поделиться

- Всегда ли вы назначаете null объекту

Нет

- Или вы полагаетесь на JVM для сборки мусора?

Да

- Делаете ли вы это для всех видов приложений, независимо от их длины?

Да

- Если да, всегда ли это хорошая практика?

Н / Д

0
ответ дан 8 December 2019 в 02:35
поделиться

Присваивание не выполняется объектам, оно выполняется для переменных , и это означает, что эта переменная затем содержит ссылку на некоторый объект. Назначение NULL переменной - это не способ уничтожить объект, это просто очищает одну ссылку.

1
ответ дан 8 December 2019 в 02:35
поделиться

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

Например:

public void foo() {
  List<? extends Trade> trades = loadTrades();
  Map<Date, List<? extends Trade>> tradesByDate = groupTradesByDate(trades);
  trades = null; // trades no longer required.

  // Apply business logic to tradesByDate map.
}

Очевидно, я мог бы уменьшить потребность в этом, преобразовав это в другой метод: Map >>

1
ответ дан 8 December 2019 в 02:35
поделиться

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

2
ответ дан 8 December 2019 в 02:35
поделиться

Мы не практикуем такое присвоение "null". Если область видимости переменной достигла своего конца, она уже должна быть готова для сборки мусора. Могут быть некоторые крайние случаи, в которых область действия длится некоторое время дольше из-за длительной операции, и в этом случае имеет смысл установить ее в значение null, но я предполагаю, что они будут редкими.

Это также происходит без говоря, что если переменная является переменной-членом объекта или статической переменной и, следовательно, никогда не выходит за пределы области видимости, то установка ее значения на нуль для GC является обязательной.

2
ответ дан 8 December 2019 в 02:35
поделиться

Присвоение переменной null неявно не означает, что она будет сразу же собрана мусором. На самом деле, скорее всего, не будет. Практикуете ли вы установку переменных в значение NULL - это обычно только косметический вопрос (за исключением статических переменных)

2
ответ дан 8 December 2019 в 02:35
поделиться

Я объявляю почти все свои переменные "окончательными". Я также делаю свои методы небольшими и объявляю большинство переменных, локальных для методов.

Поскольку они являются окончательными, я не могу присвоить им значение null после использования ... но это нормально, поскольку методы маленькие, объекты имеют право на сборку мусора после их возврата . Так как большинство переменных являются локальными, вероятность случайного удержания ссылки дольше, чем необходимо (утечка памяти), меньше.

6
ответ дан 8 December 2019 в 02:35
поделиться

Нет необходимости явно отмечать объекты как нулевые, если у вас нет очень конкретной причины. Более того, я никогда не видел приложения, которое помечает все объекты как нулевые, когда они больше не нужны. Основное преимущество сборки мусора - это внутреннее управление памятью.

11
ответ дан 8 December 2019 в 02:35
поделиться

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

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

1
ответ дан 8 December 2019 в 02:35
поделиться
Другие вопросы по тегам:

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