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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GC or not GC 
:(
    Опции темы
 
я считаю что
программист не должен заниматься управлением памятью, сборка мусора by default [ 13 ]  [48.15%]
программист должен сам заботиться о том, как программа будет управлять памятью, GC - один из возможных способов [ 14 ]  [51.85%]
Всего проголосовавших: 27
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Lazin
Дата 11.10.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



ну и?
PM MAIL Skype GTalk   Вверх
kemiisto
Дата 11.10.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Ну, я за первый вариант. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
THandle
Дата 11.10.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Второе. smile 
PM   Вверх
Любитель
Дата 11.10.2009, 20:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Lazin, у тебя появилось новое рабочее место? smile

А вообще - зависит от задачи. Для прикладных приложений - само собой полноценный GC нужен, для системного девелопмента - само собой вручную...

Добавлено через 42 секунды
PS Не голосовал


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 11.10.2009, 21:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



  Я за выбор. Т.е. чтобы его можно было включать/выключать. Вообще, мне кажется что приложение должно потреблять ресурсы настолько насколько оно полезно, а задержки по выполнению могут должны быть предсказуемы. С другой стороны во многих случаях освобождение памяти усложняет программу, и требует излишнего контроля, как следствие место для потенциальных ошибок. Но тупо использовать всегда и везде считаю неэффективным. Есть разные стратегии управления памятью, например один  владелец, остальные пользователи. Владелец освобождает память. Или же все имеют равные права, освобождаем как только никому не нужен. Или же некая связная группа, которая должна уничтожаться целиком. Уничтожение объекта связанно с освобождением всех ресурсов, не только памяти, тут же на лицо имеем искусственное разделение. Память отдельно, прочие ресурсы отдельно. Это нелогично.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 11.10.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(THandle @  11.10.2009,  20:36 Найти цитируемый пост)
Второе

почему, и для каких именно приложений?
Цитата(Любитель @  11.10.2009,  20:36 Найти цитируемый пост)
у тебя появилось новое рабочее место?

неа
Цитата(Любитель @  11.10.2009,  20:36 Найти цитируемый пост)
А вообще - зависит от задачи. Для прикладных приложений - само собой полноценный GC нужен, для системного девелопмента - само собой вручную..

 smile 
PM MAIL Skype GTalk   Вверх
Любитель
Дата 11.10.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(Alexeis @  11.10.2009,  21:08 Найти цитируемый пост)
Память отдельно, прочие ресурсы отдельно. Это нелогично. 

Логично. В высокоуровневых современных языках, рантайм которых основан на ВМ, управлять памятью вручную очень нерационально. В том числе с точки зрения скорости работы. GC достаточно продуманный механизм. Ну а так - всякие Marshal.GlobalAlloc и пр. никто не отменял..


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 11.10.2009, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Любитель @  11.10.2009,  20:20 Найти цитируемый пост)
управлять памятью вручную очень нерационально.

  Одно другому не мешает. Если я явно говорю удали, то оно должно удалиться. Зачем мне ждать пока прога скушает 100 Мб и после этого начнет чесаться о памяти? У меня может быть связанная группа объектов, для ее разруливания не нужно много мозгов, нужно просто взять и освободить. Я например захочу сделать для нее некий пул. Только для этой группы. Когда понадобиться я тупо возьму освобожу всю память одним махом и попутно освобожу внешние ресурсы. 
  На крайний случай я бы хотел иметь возможность создавать несколько таких сборщиков с разными настройками управления памятью.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 11.10.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Alexeis @  11.10.2009,  21:08 Найти цитируемый пост)
 Я за выбор. Т.е. чтобы его можно было включать/выключать.

уточню, под выбором, я имею ввиду самостоятельную реализацию механизма управления памятью, например смарт-поинтеры в С++, а не тотальное включение/выключение GC для всей программы

Цитата(Alexeis @  11.10.2009,  21:08 Найти цитируемый пост)
С другой стороны во многих случаях освобождение памяти усложняет программу, и требует излишнего контроля, как следствие место для потенциальных ошибок. 

вот именно, скорее всего, твой код работает с объектами, а не с участками памяти

Цитата(Alexeis @  11.10.2009,  21:08 Найти цитируемый пост)
Есть разные стратегии управления памятью, например один  владелец, остальные пользователи. Владелец освобождает память.
а если где-то, один из пользователей, переживет владельца? В данном случае, у тебя время жизни "пользователей" зависит от времени жизни "владельца", это дополнительная зависимость внутри приложения, которая усложняет код. Особенно весело, пытаться обеспечить эти условия в многопоточном приложении.

Цитата(Alexeis @  11.10.2009,  21:08 Найти цитируемый пост)
Или же все имеют равные права, освобождаем как только никому не нужен.
здесь нужно что-то вроде подсчета ссылок, а это то-же далеко не бесплатно, к тому-же могут возникнуть циклические зависимости

Цитата(Alexeis @  11.10.2009,  21:08 Найти цитируемый пост)
Уничтожение объекта связанно с освобождением всех ресурсов, не только памяти, тут же на лицо имеем искусственное разделение. Память отдельно, прочие ресурсы отдельно. Это нелогично.
очень даже логично, ты знаком с концепцией аллокаторов в STL?
память может быть повторно использована, либо, участок памяти может не принадлежать какому-то одному объекту

Добавлено через 6 минут и 37 секунд
Цитата(Alexeis @  11.10.2009,  21:33 Найти цитируемый пост)
Одно другому не мешает. Если я явно говорю удали, то оно должно удалиться. Зачем мне ждать пока прога скушает 100 Мб и после этого начнет чесаться о памяти?

ну, удаление объекта != освобождение памяти, если твоя программа работает под управлением современной ВМ, то создание удаление объектов - очень дешево, намного дешевле чем выделение - освобождение памяти в куче

Цитата(Alexeis @  11.10.2009,  21:33 Найти цитируемый пост)
Я например захочу сделать для нее некий пул. Только для этой группы. Когда понадобиться я тупо возьму освобожу всю память одним махом и попутно освобожу внешние ресурсы. 

лично мне, лишь однажды это потребовалось на самом деле
было это так, приложение должно было в real time делать разные вещи, скажем 1000 раз в сек. после каждого такого действия, система должна была возвращаться в исходное состояние, поэтому, я просто выделял один большой участок памяти, а затем, используя аллокаторы, создавал в нем кучу объектов, затем, когда вычисления были выполнены, этот блок памяти просто помечался как свободный
но это исключительный случай smile 
PM MAIL Skype GTalk   Вверх
Любитель
Дата 11.10.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(Alexeis @  11.10.2009,  21:33 Найти цитируемый пост)
  Одно другому не мешает. Если я явно говорю удали, то оно должно удалиться. Зачем мне ждать пока прога скушает 100 Мб и после этого начнет чесаться о памяти? У меня может быть связанная группа объектов, для ее разруливания не нужно много мозгов, нужно просто взять и освободить. Я например захочу сделать для нее некий пул. Только для этой группы. Когда понадобиться я тупо возьму освобожу всю память одним махом и попутно освобожу внешние ресурсы. 
  На крайний случай я бы хотел иметь возможность создавать несколько таких сборщиков с разными настройками управления памятью. 

Ну.. Вообщем-то я уже говорил - никто не мешает использовать интероп-методы. Это раз. Второе - есть C++/CLI. Сорри за привязку к дотнету - я говорю про суть.

Ведь очевидно, что, если GC впринципе имеет место быть, он должен хранить "свои" объекты. А твой пул - нет. Поэтому это отдельный тип объектов, живущий по своим законам. Со внешним миром он должен общаться только через конкретный интерфейс, доступа (прямого) к выделеной памяти очевидно он не должен давать..

Цитата(Lazin @  11.10.2009,  21:34 Найти цитируемый пост)
здесь нужно что-то вроде подсчета ссылок, а это то-же далеко не бесплатно, к тому-же могут возникнуть циклические зависимости

Собственно главная проблема классических "идеальных" смарт-поинтеров в С++ - это именно производительность. Они жутко медлены. По сравнению с полноценным GC.

Добавлено через 7 минут и 11 секунд
Ах, да - думать о памяти приходится, хотя и крайне редко и при наличии GC. Если мы знаем, что собираемся выполнить операцию, которой может понадобится дофига памяти (какие-нибудь глобальные маппинги там хравнить, например, придётся) - то можно явно запустить сборку мусора перед этой операцией. Чтобы сама операция была, условно говоря, непрерывной. Но опять-таки (как всегда) думать об это заранее - явно не стоит..

А ещё приходится явно вызывать релиз каждого COM-объекта, при использовании OLE-автоматизации на server-side. Но это минус .Net VM, а не объективная необходимость.


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 11.10.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Lazin @  11.10.2009,  20:34 Найти цитируемый пост)
здесь нужно что-то вроде подсчета ссылок, а это то-же далеко не бесплатно, к тому-же могут возникнуть циклические зависимости

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 11.10.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Любитель @  11.10.2009,  20:36 Найти цитируемый пост)
А вообще - зависит от задачи. Для прикладных приложений - само собой полноценный GC нужен, для системного девелопмента - само собой вручную...

+1


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 11.10.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(Alexeis @  11.10.2009,  22:17 Найти цитируемый пост)
Типичная задача для GC

GC не занимается ни в коем случае постоянным подсчётом ссылок. Подсчёт производится, но только когда это нужно. Основываясь на том, что информация обо всех объектах (о стеке, о статическех филдах и т. д.) доступна для ВМ.


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 12.10.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Любитель @  11.10.2009,  22:38 Найти цитируемый пост)
GC не занимается ни в коем случае постоянным подсчётом ссылок. Подсчёт производится, но только когда это нужно. Основываясь на том, что информация обо всех объектах (о стеке, о статическех филдах и т. д.) доступна для ВМ.

  Я этого не говорил. Речь шла об определении времени жизни объекта с многими владельцами. Эту стратегию отлично закрывает GC, не в пример SharedPtr. Вот только памяти все это жрет...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Void
Дата 12.10.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(Alexeis @  12.10.2009,  02:14 Найти цитируемый пост)
Вот только памяти все это жрет... 

GC? По сравнению с чем?


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

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


 




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


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

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