Важная информация

User Tag List

Результаты опроса: Сборка мусора на Speccy?

Голосовавшие
28. Вы ещё не участвовали в этом опросе
  • Да

    3 10.71%
  • Нет

    25 89.29%
Страница 2 из 10 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 94

Тема: Сборка мусора

  1. #11

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от random
    Не стоит смеяться. Это очень полезный вопрос. В связи с перекладыванием функций выделения памяти на ось, туда же падает освобождение памяти. Во всяком случае, когда программа самоликвидировалась, необходимо освободить всю принадлежащую ей память.
    Здесь имеет место другое: подразумевается что указанный ЯВУ работает поверх нормальной системы.
    А тогда сам вопрос отпадает.
    С другой стороны, если считать что в этом смысле ЯВУ заменяет собой систему, то получается ещё лучше: вариации на тему "хотел написать оболочку, написал ОСь"
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  2. #12

    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от elf/2
    теперь представим, что в выделенной области памяти мы храним указатели на другие динамически выделенные области. без наличия понятия объект и тип объекта корректное освобождение памяти в этом случае не представляется возможным.
    Сборщик мусора должен иметь информацию обо всех указателях. В том числе находящихся внутри объектов. При работе он ищет все достижимые через указатели объекты, в том числе через цепочки указателей внутри объектов.
    Таким образом, корректная сборка мусора возможна.

  3. #13

    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Сборщик мусора должен иметь информацию обо всех указателях. В том числе находящихся внутри объектов. При работе он ищет все достижимые через указатели объекты, в том числе через цепочки указателей внутри объектов.
    Таким образом, корректная сборка мусора возможна.
    ближе к коду:
    1. мы попросили у системы 100 байт
    2. нам вернули указатель на выделенную память в регистре HL
    3. это был временный буфер, мы его использовали и он нам больше не нужен

    что мы должны сделать дальше чтобы сборщик мусора понял что эту память можно забирать?

  4. #14

    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от elf/2
    ближе к коду:
    1. мы попросили у системы 100 байт
    2. нам вернули указатель на выделенную память в регистре HL
    3. это был временный буфер, мы его использовали и он нам больше не нужен

    что мы должны сделать дальше чтобы сборщик мусора понял что эту память можно забирать?
    указатели должны быть типизированы или каждый блок памяти иметь маркер типа или размера блока

  5. #15

    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от elf/2
    ближе к коду:
    1. мы попросили у системы 100 байт
    2. нам вернули указатель на выделенную память в регистре HL
    3. это был временный буфер, мы его использовали и он нам больше не нужен

    что мы должны сделать дальше чтобы сборщик мусора понял что эту память можно забирать?
    Для упрощения конструкции лучше, чтобы все указатели находились в памяти, то есть в данном случае нужно чтобы либо сразу после этого выделения HL сразу атомарно записывался в память, где его найдёт сборщик мусора, либо чтобы функция выделения памяти сама записывала указатель в память.

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

  6. #16

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Сборка мусора - это способ автоматического управления памятью, применяемый в большинстве функциональных языков программирования и в некоторых императивных языках. В том числе в технологиях Java и .NET от известных транснациональных корпораций.
    указанные языки хранятся в памяти в виде байт-кода. а выполнением занимается виртуальная машина. очистка неиспользуемой памяти идет отдельным потоком (т.е. как минимум нужна многозадачность). плюс к тому, очистка происходит в несколько этапов, т.н. поколений. если блок памяти не выдержал проверки, он убивается. реализация данного дела довольно сложна, поэтому должна быть не частью ОС, а частью реализации ЯВУ (если таковые будут), потому как автоматическая сборка мусора довольно ресурсоемкое занятие.

    Цитата Сообщение от captain cobalt
    Автоматическое управление памятью с помощью сборки мусора налагает некоторые ограничения на программы (например, требование ссылочной прозрачности всех структур данных).
    Однако радикально поднимает удобство программирования.
    для написания программ на ЯВУ- это сплошное удовольствие. а представь каково это на асме? двойная адресация (адресуем ячейку, в которой хранится адрес выделенного блока памяти) будет замедлять и без того невысокую скорость работы программ. плюс трата системных ресурсов на периодическую проверку и сборку этого мусора.

    Цитата Сообщение от captain cobalt
    Какие будут мнения насчёт обоснованности применения сборщиков мусора в средах исполнения на Speccy?
    скажу за себя (и это мое глубочайшее IMHO)- языки без автоматической сборки мусора более дисциплинируют- программист сам несет ответственность за эффективность использования памяти (зачастую более высокую, чем у сборщика). а что касается памяти процесса- то она конечно очищается после того как процесс прекратил свое существование. если работа процесса разовая, то об очистке беспокоиться не надо- все уберется потом. но для "долгоиграющих" процессов надо заботиться об очистке

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    23.03.2005
    Адрес
    г. Чернигов, Украина
    Сообщений
    477
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А как насчет скорости ?

    Ну, на спеке так не развернешься, как пишут... В любом случае кодер знает сколько памяти сожрет его прога. Значит и в запросах можно оперировать реальными числами. Т.е.
    1. говоришь, что надо тебе 3х16кб страницы.
    2. Ось говорит: на и вешает на эти 3 страницы флажок занято. при этом дает тебе номерок
    3. говоришь "у меня всё"
    и даешь ей номерок и код "у меня всё"
    4. ось говорит ОК и снимает флажки занято.

    dll

    принцип тот же, нужен тебе dll:

    1. берешь список процессов (программ/модулей.. как угодно) оси ищешь название/код (версию) dll (а как еще ?)
    2.нету такого. Ага. говришь оси нужна еще скжаем страница под эту dll.
    3. ось выдает страницу.
    4. грузишь dll туда но в список процессов вносишь ее код/ имя.
    сам можешь закрываться, dll останется, но!

    на таких ресурсах вешать 1 байт - колво пользующихся. Т.е. 1 прога юзает dll -1 ,3 юзают - 3. никто не юзает - 0 но из списка убирать ресурс только тогда, когда его страницу кому-то отдали.

    А вот теперь и сбощик мусора: нет его как такового. Он просто должен в первую очередь выдавать память из под приложений, а если ее не хватает, то из под неиспольз. dll. И обновлять список приложений, ресурсов (процессов) чтоб не юзались ресурсы.

    Такой вот простой менеджер памяти с уборкой мусора. Ну а теперь как реализовать реально хотя бы такое... И сколько оно будет жрать ресурсов само по себе ?

  9. #18

    Регистрация
    23.03.2005
    Адрес
    г. Чернигов, Украина
    Сообщений
    477
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Vitamin! Ты тут? А ну говори, что нибудь по этому поводу! Ты ж этим занимался

  10. #19

    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Talking Я понял!

    Чтобы схема заработала надо лобзиком дрова напилить!
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  11. #20

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от GriV
    Чтобы схема заработала надо лобзиком дрова напилить!
    сказал как в лужу пёрднул %)

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

    для смотрящих в сторону C# и Java, где сабж реализован, замечу, что данные языки являются производными от базового- С/С++, где есть функции как выделения, так и освобождения памяти.

Страница 2 из 10 ПерваяПервая 123456 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •