Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / самый_ламерский_вопрос / 25 сообщений из 26, страница 1 из 2
05.09.2007, 01:33:35
    #34776104
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
когда garbage collector сможет забрать объект?
если ссылка на него все ещё имеется но не используется, он не сможет ее забрать?

например

psvm () {
MyClass mc = new MyClass();

и тут 1000000000000 действий которые жрут память, mc вообще никогда и нигде больше по коду не используется
}

gc() никогда его не релизнет?
...
Рейтинг: 0 / 0
05.09.2007, 01:35:16
    #34776105
Primax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
по идее да(т.е. не удалит из памяти)
...
Рейтинг: 0 / 0
05.09.2007, 01:37:52
    #34776106
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
почему? он же компилит все, знает что и куда пойдет...
...
Рейтинг: 0 / 0
05.09.2007, 01:43:56
    #34776109
untitled
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
пока метод не завершится объект собран не будет
чтобы он собрался надо явно приравнять его к null
...
Рейтинг: 0 / 0
05.09.2007, 01:50:19
    #34776111
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
ясно.
я проиграл. :)
...
Рейтинг: 0 / 0
05.09.2007, 02:11:38
    #34776116
PassingBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Who am Iясно.
я проиграл. :)

Не факт. Помимо сборщика мусора еще JIT есть с хитрыми оптимизациями, который вообще такую инстанцианцию может выкинуть из исполняемого кода. Может быть ленивая инициализация. Наконец, сам gc скорее всего будет вызван до окончания метода. Если этот gc использует генерации (а сановский именно таков), то твой инстанс - первый кандидат на отстрел.
...
Рейтинг: 0 / 0
05.09.2007, 02:14:10
    #34776117
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Как мне сделать так чтобы он очистил его? (Переопределил finalize и поставил туда sout)
...
Рейтинг: 0 / 0
05.09.2007, 11:31:21
    #34776839
PassingBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Who am IКак мне сделать так чтобы он очистил его? (Переопределил finalize и поставил туда sout)

Никак. В яве нет ручного управления памятью. Метод finalize может и вовсе не быть вызван - HotSpot - хитрая штука.
...
Рейтинг: 0 / 0
05.09.2007, 13:43:45
    #34777561
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Who am Iкогда garbage collector сможет забрать объект?
если ссылка на него все ещё имеется но не используется, он не сможет ее забрать?

например

Код: plaintext
1.
2.
3.
4.
psvm () {
  MyClass mc =  new  MyClass(); 

  и тут  1000000000000  действий которые жрут память, mc вообще никогда и нигде больше по коду не используется
}

gc() никогда его не релизнет?

Попробуй использовать в качестве ссылки на mc - SoftReference, в этом случае сборщик мусора удалит сей объект если не хватит памяти.
...
Рейтинг: 0 / 0
05.09.2007, 13:46:39
    #34777576
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
PassingBy
Может быть ленивая инициализация.
А можно поподробнее... ?
...
Рейтинг: 0 / 0
05.09.2007, 17:11:15
    #34778655
Primax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Who am IКак мне сделать так чтобы он очистил его? (Переопределил finalize и поставил туда sout)
ээ..что такое sout ?
...
Рейтинг: 0 / 0
05.09.2007, 18:51:24
    #34779085
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Primax Who am IКак мне сделать так чтобы он очистил его? (Переопределил finalize и поставил туда sout)
ээ..что такое sout ?

System.out("Got it!");

Чтобы было видно если объект был собран коллектором.
...
Рейтинг: 0 / 0
05.09.2007, 19:38:00
    #34779250
Tsahes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Who am IКак мне сделать так чтобы он очистил его? (Переопределил finalize и поставил туда sout)
Вообще, вызов
Код: plaintext
System.gc()
предлагает JVM запустить gc на сбор мусора. Но гарантий, что gc действительно будет запущен, нет.
...
Рейтинг: 0 / 0
05.09.2007, 19:38:59
    #34779253
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Tsahes Who am IКак мне сделать так чтобы он очистил его? (Переопределил finalize и поставил туда sout)
Вообще, вызов
Код: plaintext
System.gc()
предлагает JVM запустить gc на сбор мусора. Но гарантий, что gc действительно будет запущен, нет.

Я все это делаю + загружаю память по максимуму.
sout не происходит.
...
Рейтинг: 0 / 0
05.09.2007, 21:27:42
    #34779371
untitled
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
попробуй написать так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
psvm () {
MyClass mc =  new  MyClass(); 

mc= null ;

и тут  1000000000000  действий которые жрут память, mc вообще никогда и нигде больше по коду не используется
}
...
Рейтинг: 0 / 0
05.09.2007, 22:23:08
    #34779416
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
untitledпопробуй написать так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
psvm () {
MyClass mc =  new  MyClass(); 

mc= null ;

и тут  1000000000000  действий которые жрут память, mc вообще никогда и нигде больше по коду не используется
}


Интересно, а чем занимается класс MyClass? Он действительно так много ест памяти на самом деле? Может утечки памяти в другом месте?
...
Рейтинг: 0 / 0
05.09.2007, 22:32:26
    #34779423
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
unicornmirage untitledпопробуй написать так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
psvm () {
MyClass mc =  new  MyClass(); 

mc= null ;

и тут  1000000000000  действий которые жрут память, mc вообще никогда и нигде больше по коду не используется
}


Интересно, а чем занимается класс MyClass? Он действительно так много ест памяти на самом деле? Может утечки памяти в другом месте?

Прошу прощения если говорю непонятно. :)
Я знаю что если присвоить null, то коллектор заберет его.
Вопрос в том что он не забирает его если на него есть ссылка. Почему? Ведь логично же что уже можно его забрать. :) Вот в чем вопрос.
...
Рейтинг: 0 / 0
05.09.2007, 22:44:02
    #34779433
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
Who am I
Прошу прощения если говорю непонятно. :)
Я знаю что если присвоить null, то коллектор заберет его.
Вопрос в том что он не забирает его если на него есть ссылка. Почему? Ведь логично же что уже можно его забрать. :) Вот в чем вопрос.
Ну вот поэтому, как мне кажется, для ситуаций, которые Вы подняли Вашим вопросом, и существуют Sowt- и WeakReference.. Вы сами проектируете ваше приложение, структуру и алгоритмы, и поэтому на Вас также лежит ответственность за распредление ресурсов.
...
Рейтинг: 0 / 0
05.09.2007, 22:55:04
    #34779440
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
unicornmirage Who am I
Прошу прощения если говорю непонятно. :)
Я знаю что если присвоить null, то коллектор заберет его.
Вопрос в том что он не забирает его если на него есть ссылка. Почему? Ведь логично же что уже можно его забрать. :) Вот в чем вопрос.
Ну вот поэтому, как мне кажется, для ситуаций, которые Вы подняли Вашим вопросом, и существуют Sowt- и WeakReference.. Вы сами проектируете ваше приложение, структуру и алгоритмы, и поэтому на Вас также лежит ответственность за распредление ресурсов.

Да, я уже понял. Спасибо большое.
...
Рейтинг: 0 / 0
06.09.2007, 00:31:28
    #34779554
chand0s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
PassingBy
Если этот gc использует генерации (а сановский именно таков), то твой инстанс - первый кандидат на отстрел.
А что это за штука такая - генерации?
...
Рейтинг: 0 / 0
06.09.2007, 00:40:31
    #34779560
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
PassingBy
Может быть ленивая инициализация.
А также хотелось бы поподробнее узнать что это такое?
...
Рейтинг: 0 / 0
06.09.2007, 17:35:43
    #34782330
PassingBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
chand0s PassingBy
Если этот gc использует генерации (а сановский именно таков), то твой инстанс - первый кандидат на отстрел.
А что это за штука такая - генерации?

http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html#1.1.%20Generations%7Coutline - тут все рассказано
...
Рейтинг: 0 / 0
06.09.2007, 17:37:18
    #34782334
PassingBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
unicornmirage PassingBy
Может быть ленивая инициализация.
А также хотелось бы поподробнее узнать что это такое?

Это я ерунду сказал :) Ява - жадный язык, и никакой HotSpot этого не изменит. Но автор топика может тем не менее надеяться на dead code elimination после очередной перекомпиляции.
...
Рейтинг: 0 / 0
07.09.2007, 14:13:11
    #34784467
alienslon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
если mc нигде не используется почему бы не сделать mc=NULL и потом System.gc();
...
Рейтинг: 0 / 0
07.09.2007, 23:51:52
    #34785761
Who am I
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
самый_ламерский_вопрос
alienslonесли mc нигде не используется почему бы не сделать mc=NULL и потом System.gc();

это был упрощенный пример.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / самый_ламерский_вопрос / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]