Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Требуется ли удаление экземпляров классов? ..чтобы разгрузить программу.. 
:(
    Опции темы
Proger10
Дата 29.1.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Вопрос такой. В больших программах создаётся много экземпляров классов. И эти классы бывают огромных размеров.
Когда не нужны какие-то созданные экземпляры классов, нужно ли их удалять? Чтобы разгрузить память.. Если они в данное время не нужны, чего их в памяти-то держать, прально?

Как создавать в книгах пишу, а вот как удалять их чего-то я ещё не сталкивался smile
PM MAIL   Вверх
almagnit
Дата 29.1.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 3.4.2008

Репутация: 1
Всего: 7



Точно не знаю, но количество загружаемых в программу класов через import влияет на время загрузки программы, а в процессе работы

Java самостоятельно регулирует загруженность имеющейся памяти.
PM MAIL ICQ   Вверх
fixxer
Дата 29.1.2009, 17:49 (ссылка) |    (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Обнуляй ненужные ссылки, в Java встроен Ктулху, он объекты сам зохавает потом smile


--------------------
user posted image
PM MAIL ICQ   Вверх
Proger10
Дата 29.1.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Обнулять ненужные ссылки это что имеется ввиду?
Что-то типа:
Код

MyClass myClass = new MyClass();
//...поработали с классом и как не нужен стал:
myClass = null;

типа такого?
PM MAIL   Вверх
vdim
Дата 29.1.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 19.4.2008

Репутация: нет
Всего: нет



по научному Ктулху называется сборщик мусора. Периодически он прогоняет программу на предмет не используемых ссылок и сам их удаляет. Из-за чего java считается тормознутой ибо найти все, что не используется, это не delete на совесть программистам оставить. 
PM MAIL   Вверх
Proger10
Дата 30.1.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



А нельзя ли отключать этот сборщик мусора? Чтобы тормоза оставить на совесть программиста.

Так что-то и не очень понял я, нужно ли таким образом удалять то, что в данный момент не нужно (экземпляры созданных классов) или постоянно хранить их в памяти?
PM MAIL   Вверх
math64
Дата 30.1.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Сборщик мусора отключить нельзя, можно только меньше мусорить или помогать мусорщику, устанавливая указатели на ненужные объекты в null.
PM   Вверх
Skynin
Дата 30.1.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Помочь сборщику мусора можно еще с помощью WeakReference
Обычное применение - держать так большие кэшируемые данные, которые можно перечитать, если их уже Ктулху зохавал.
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
JSpark
Дата 30.1.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Цитата(Proger10 @ 30.1.2009,  10:24)
А нельзя ли отключать этот сборщик мусора? Чтобы тормоза оставить на совесть программиста.

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

Цитата(Proger10 @ 30.1.2009,  10:24)
Когда не нужны какие-то созданные экземпляры классов, нужно ли их удалять? Чтобы разгрузить память.. 

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



Это сообщение отредактировал(а) JSpark - 30.1.2009, 10:58
PM MAIL   Вверх
ecologist
Дата 30.1.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



Да вообщем еще хорошо посмотреть как можно настроить параметры сборщика мусора - его влияние можно снизить кардинально.

От того, что ты будешь обнулять ссылки - легче не станет. Это же ссылки - т.е. они ссылаются на объект в памяти. Все равно процесс удаления объектов берет на себя Ктулху.

Читайте маны - 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/

Читайте
PM MAIL   Вверх
Proger10
Дата 30.1.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Цитата
От того, что ты будешь обнулять ссылки - легче не станет. Это же ссылки - т.е. они ссылаются на объект в памяти. Все равно процесс удаления объектов берет на себя Ктулху.

но.. есть ли тогда смысл заNULLять ненужные объекты?
PM MAIL   Вверх
fixxer
Дата 30.1.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(Proger10 @ 30.1.2009,  12:07)
Цитата
От того, что ты будешь обнулять ссылки - легче не станет. Это же ссылки - т.е. они ссылаются на объект в памяти. Все равно процесс удаления объектов берет на себя Ктулху.

но.. есть ли тогда смысл заNULLять ненужные объекты?

Пока есть хотя бы одна ссылка на объект он не может быть зохаван.


--------------------
user posted image
PM MAIL ICQ   Вверх
AntonSaburov
Дата 30.1.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(fixxer @  30.1.2009,  12:55 Найти цитируемый пост)
Пока есть хотя бы одна ссылка на объект он не может быть зохаван. 

Наиболее часто обнуление происходит при работе с локальными переменными - т.е. к окончанию работы функции. Локаные переменные "завершают" свою работу и обнуляюся. И в подавляющем большинстве случаев их досрочное обнуление мало что решает. Так что я бы не заморачивался. Тут ecologist в какой-то мере прав.
PM MAIL WWW ICQ   Вверх
math64
Дата 31.1.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Есть один случай (а можеть быть и больше) когда нужно специальное зануление:
Нитка крутится в бесконечном цикле, пока не установлено terminate = true, связанные с ней ресурсы не будут удалены
Код

boolean terminate;
void run() {
  while(!terminate) { ... }
}


PM   Вверх
VSergeyV
Дата 2.2.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 299
Регистрация: 9.5.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Цитата(vdim @  29.1.2009,  21:49 Найти цитируемый пост)
Периодически он прогоняет программу на предмет не используемых ссылок и сам их удаляет. 

Можно сделать это принудительно
Код

System.gc();

gc() - Runs the garbage collector.

В IDE IntelliJ IDEA в углу есть градусник - сколько памяти занято и кнопка чтобы юзер мог сам вызывать garbage collector.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1327 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.