классы, управляющие собственной памятью

#java #memory-leaks #effective-java

#java #утечки памяти #эффективно-java

Вопрос:

Эффективная Java: Пункт 6: Устранение устаревших ссылок на объекты.

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

Я не думаю, что я полностью понял описание.

Каковы примеры класса, управляющего своей собственной памятью — я могу думать о массиве, списке, возможно, карте.

Может ли кто-нибудь объяснить этот пункт несколько подробнее, он есть в книге? Спасибо

Комментарии:

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

2. @EJP Я прочитал раздел. Я понял, что было не так в приведенном примере. Однако я не в состоянии визуализировать многие такие ситуации. Так что, я думаю, я не совсем понял это.

3. Таких ситуаций не так много. Два из них — Stack и ArrayList.

Ответ №1:

Вот один простой пример ArrayList , где, когда элемент удаляется из конца списка, он должен обнулять элемент массива, а не просто уменьшать индекс «последнего элемента». В противном случае удаленный объект остается доступным для ArrayList .

Комментарии:

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

Ответ №2:

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