Автор Тема: Зачем сборщик мусора?  (Прочитано 17378 раз)

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Зачем сборщик мусора?
« Ответ #30 : Февраль 06, 2012, 12:26:03 pm »
А как высококлассные специалисты собираются бороться с фрагментацией памяти?
Также как обычно. Например в MacOS (классике, а не в OS X) система умела компактифицировать память. То есть бороться с фрагментацией. При этом никаких сборщиков мусора не было.
А можете пояснить в двух словах "как обычно"? Я вот не знаток MacOS классики.
Есть пауза при компактифицировании или нет? Допустим, объем памяти гигантский.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Зачем сборщик мусора?
« Ответ #31 : Февраль 06, 2012, 12:58:42 pm »
Обычные менеджеры памяти (окромя самых древних) в ОС делают дефрагментацию памяти, так что сам сборщик мусора, работающий поверх него, может и не знать ни о какой дефрагментации -- просто выделяет и когда соизволит -- освободит память.
Насколько я знаю, стандартные менеджеры памяти совсем не реал-таймные, пример -- дикие свопинги в винде или линупсе...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

alexus

  • Гость
Re: Зачем сборщик мусора?
« Ответ #32 : Февраль 06, 2012, 01:36:33 pm »
Обычные менеджеры памяти (окромя самых древних) в ОС делают дефрагментацию памяти, так что сам сборщик мусора, работающий поверх него, может и не знать ни о какой дефрагментации -- просто выделяет и когда соизволит -- освободит память.
Насколько я знаю, стандартные менеджеры памяти совсем не реал-таймные, пример -- дикие свопинги в винде или линупсе...
Не, это Вы зря... Менеджеры памяти и в WinNT/XP/7/серверных вариантах, и в Linux (на уровне ядра) сделаны очень грамотно. Да, и современные процессоры эффективно поддерживают работу с памятью. На физическом уровне вся память разделена на страницы. Никакого сжатия страниц нет. Освободившиеся страницы возвращаются ОС, где очищаются и, если необходимо, то передаются другому процессу, вставляясь в нужное место виртуальной памяти данного процесса. В случае, если физической памяти недостаточно, происходит запись "ненужной" страницы на внешний носитель, после этого страница помечается, как свободная, очищается и передаётся процессу, который запрашивает память. При обращении к выгруженной странице, происходит её загрузка с внешнего носителя на свободную страницу физической памяти и подстановка по заданному адресу. При этом может возникнуть ситуация, когда нет доступных страниц. Поэтому сначала выгружается другая "ненужная" страница, а на её место загружается "нужная". Отсюда и свопинг. Чем меньше физической памяти и чем интенсивнее выдаются запросы на выделение памяти, тем чаще страницы сбрасываются на внешний носитель и загружаются с него. Но другого, сравнимого по эффективности, алгоритма работы/устройства менеджера памяти нет.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора?
« Ответ #33 : Февраль 06, 2012, 01:52:08 pm »
В случае, если физической памяти недостаточно, происходит запись "ненужной" страницы на внешний носитель, после этого страница помечается, как свободная, очищается и передаётся процессу, который запрашивает память. При обращении к выгруженной странице, происходит её загрузка с внешнего носителя на свободную страницу физической памяти и подстановка по заданному адресу. При этом может возникнуть ситуация, когда нет доступных страниц. Поэтому сначала выгружается другая "ненужная" страница, а на её место загружается "нужная". Отсюда и свопинг.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора?
« Ответ #34 : Февраль 06, 2012, 01:52:38 pm »
Да, а про макось классику я напишу позже :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

alexus

  • Гость
Re: Зачем сборщик мусора?
« Ответ #35 : Февраль 06, 2012, 02:58:27 pm »
Это немного не так. Есть разные стратегии.
Там изложен принцип, в детали я не вдавался...
Сейчас я хочу прикрутить видеокарты для многопоточной обработки данных (на основе OpenCL), появляется третий вид памяти той, что на видеокартах. Интересно, но есть проблемы с когерентностью... поэтому ещё интереснее... времени только не хватает.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Зачем сборщик мусора?
« Ответ #36 : Февраль 07, 2012, 06:07:41 pm »
У меня такой проблемы не возникало. Разнородные данные закачиваются из БД, каждый тип в свою область памяти, там и живут, пока нужны. Когда не нужны, все выбрасываются. Чтобы каждому типу хватило памяти, на этапе проектирования программы формируются карта распределения памяти.
С данными каждого типа работают, как с массивом (хотя количество данных меняется в широких пределах, но назвать этот массив динамическим язык не поворачивается). То есть, под массив отводится максимально нужное количество виртуальной памяти, но физически память выделяется в процессе закачки данных.

Это все классно звучит... Но вот если ближе к мэйнстриму (тому самому, ненавидимому оберонщиками)... Вот мне надо сложить две строки. Какие нафиг карты памяти?

alexus

  • Гость
Re: Зачем сборщик мусора?
« Ответ #37 : Февраль 08, 2012, 02:47:03 am »
если ближе к мэйнстриму (тому самому, ненавидимому оберонщиками)... Вот мне надо сложить две строки. Какие нафиг карты памяти?
Складывание двух строк... это не мэйнстрим. Мэйнстрим - это интернет-общение, интернет-торговля, социалки, интернет-сервисы... а это не складывание строк, это обработка сотен тысяч запросов...

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Зачем сборщик мусора?
« Ответ #38 : Февраль 08, 2012, 06:22:04 am »
Мейнстрим - это подход к решениям задач.

alexus

  • Гость
Re: Зачем сборщик мусора?
« Ответ #39 : Февраль 08, 2012, 06:27:04 am »
Мейнстрим - это подход к решениям задач.
Скорее, определённый класс наиболее востребованных задач, а значит и программ/приложений... К примеру сейчас наблюдается явное смещение в сторону насыщения планшетов простыми программками, игрушками и пр. Андроид оттягивает на себя приличные ресурсы... времени программистов. Понятно, что это явление временное, но за полгода очень серьёзный крен.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Зачем сборщик мусора?
« Ответ #40 : Февраль 08, 2012, 08:33:51 am »
Ну, конкретное значение этого термина зависит от "предметной области", так сказать. Моё определение касается тех, тех, кто в основном работает с кодом.

alexus

  • Гость
Re: Зачем сборщик мусора?
« Ответ #41 : Февраль 08, 2012, 08:54:16 am »
Ну, конкретное значение этого термина зависит от "предметной области", так сказать. Моё определение касается тех, тех, кто в основном работает с кодом.
Согласен...