Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Требуется ли удаление экземпляров классов? |
Автор: Proger10 29.1.2009, 17:23 |
Вопрос такой. В больших программах создаётся много экземпляров классов. И эти классы бывают огромных размеров. Когда не нужны какие-то созданные экземпляры классов, нужно ли их удалять? Чтобы разгрузить память.. Если они в данное время не нужны, чего их в памяти-то держать, прально? Как создавать в книгах пишу, а вот как удалять их чего-то я ещё не сталкивался ![]() |
Автор: almagnit 29.1.2009, 17:38 |
Точно не знаю, но количество загружаемых в программу класов через import влияет на время загрузки программы, а в процессе работы Java самостоятельно регулирует загруженность имеющейся памяти. |
Автор: fixxer 29.1.2009, 17:49 |
Обнуляй ненужные ссылки, в Java встроен Ктулху, он объекты сам зохавает потом ![]() |
Автор: Proger10 29.1.2009, 19:34 | ||
Обнулять ненужные ссылки это что имеется ввиду? Что-то типа:
типа такого? |
Автор: vdim 29.1.2009, 21:49 |
по научному Ктулху называется сборщик мусора. Периодически он прогоняет программу на предмет не используемых ссылок и сам их удаляет. Из-за чего java считается тормознутой ибо найти все, что не используется, это не delete на совесть программистам оставить. |
Автор: Proger10 30.1.2009, 10:24 |
А нельзя ли отключать этот сборщик мусора? Чтобы тормоза оставить на совесть программиста. Так что-то и не очень понял я, нужно ли таким образом удалять то, что в данный момент не нужно (экземпляры созданных классов) или постоянно хранить их в памяти? |
Автор: math64 30.1.2009, 10:35 |
Сборщик мусора отключить нельзя, можно только меньше мусорить или помогать мусорщику, устанавливая указатели на ненужные объекты в null. |
Автор: Skynin 30.1.2009, 10:45 |
Помочь сборщику мусора можно еще с помощью http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ref/WeakReference.html Обычное применение - держать так большие кэшируемые данные, которые можно перечитать, если их уже Ктулху зохавал. |
Автор: JSpark 30.1.2009, 10:57 | ||||
Разработчики java как раз уходили от ручного удаления объектов, в отличии от си, для этого был разработан сборщик мусора. Данный подход позволяет сократить время на разработку, так как частая ошибка в си коде, это забывание удалить ненужные объекты, после чего такие программы становятся не работоспособными и на исправление тратится время.
Конечно надо, это делается присвоением null объекту после чего сборщик мусора сам удалит объект. В принципе можешь не занулять к примеру в таком случае: ты создал локальный объект и после отработки метода он будет все равно собран ну конечно если только он не возвращается из этой функции, сборщик удаляет объекты на которые в программе больше нет ссылок. |
Автор: ecologist 30.1.2009, 11:01 |
Да вообщем еще хорошо посмотреть как можно настроить параметры сборщика мусора - его влияние можно снизить кардинально. От того, что ты будешь обнулять ссылки - легче не станет. Это же ссылки - т.е. они ссылаются на объект в памяти. Все равно процесс удаления объектов берет на себя Ктулху. Читайте маны - http://java.sun.com/javase/technologies/hotspot/gc/index.jsp А для настройки (прямо оттуда) - Java 1.5 - http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html Java 1.4 - http://java.sun.com/docs/hotspot/gc1.4.2/ Читайте |
Автор: Proger10 30.1.2009, 12:07 | ||
но.. есть ли тогда смысл заNULLять ненужные объекты? |
Автор: fixxer 30.1.2009, 12:55 | ||||
Пока есть хотя бы одна ссылка на объект он не может быть зохаван. |
Автор: AntonSaburov 30.1.2009, 13:06 |
Наиболее часто обнуление происходит при работе с локальными переменными - т.е. к окончанию работы функции. Локаные переменные "завершают" свою работу и обнуляюся. И в подавляющем большинстве случаев их досрочное обнуление мало что решает. Так что я бы не заморачивался. Тут ecologist в какой-то мере прав. |
Автор: math64 31.1.2009, 00:40 | ||
Есть один случай (а можеть быть и больше) когда нужно специальное зануление: Нитка крутится в бесконечном цикле, пока не установлено terminate = true, связанные с ней ресурсы не будут удалены
|