powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный идеальный сборщик мусора
25 сообщений из 87, страница 3 из 4
Тяпничный идеальный сборщик мусора
    #39271257
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonчтобы понять сколько стека по дефолтуОт мегабайта и выше, если только вы не ядрёный драйвер делаете.
Плюс, может автоматически увеличиваться, если "туды покладено" нечто бОльшее.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271284
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovmaytonчтобы понять сколько стека по дефолтуОт мегабайта и выше, если только вы не ядрёный драйвер делаете.
Плюс, может автоматически увеличиваться, если "туды покладено" нечто бОльшее.
Мда... если смешивать много malloc и aalloc то у нас будет пухнуть оба сегмента что
в результате скорее всего приведет к нерациональному использованию места.
Лучше уж наверное оставить аллокацию в куче но применить к ней стековые
алгоритмы очистки.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271293
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЛучше уж наверное оставить аллокацию в куче но применить к ней стековые
алгоритмы очистки.
тогда она рискует из кучи превратиться в стек :)

сейчас плавно придём к тому, что в приложении нужно иметь несколько пулов для разных нужд,
и пулы для короткоживущих данных просто грохать тем или иным способом.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271295
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилmaytonЛучше уж наверное оставить аллокацию в куче но применить к ней стековые
алгоритмы очистки.
тогда она рискует из кучи превратиться в стек :)

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

По поводу JVM. Я наблюдал ее активности через графики JVisualVM и пришел к следующему.
Есть мысль что необходимо минимизировать миграцию обЪектов Eden->Survival(0|1)->Old.
А чтоб минимизировать нужно фактически детектировать ЧТО за объекты постоянно прыгают
из Эдемского сада в "старички". Или что за алгоритм их продуцирует.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271308
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНо я обращу
внимание на то что когда мы решаем задачи масштабирования в общем понимании этого слова то нам
нужно решать вопросы конкурентных updates.
у тебя дыра в общего характера знаниях.

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

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


даже вариант MxN - M серверов приложений на N баз данных - уже тупиковый, потому что каждый сервер баз данных должен поддерживать M сосединений.
сервер приложений и база данных должны иметь связь 1:1 и только, иначе никакого масштабирования не будет, ваш КО

а раз 1:1 - то ... какие претензии к имению одного локального сервера баз данных (а все остальное - уже коммуникации на уровне веб сервисов).

простая же истина
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271309
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилmaytonЛучше уж наверное оставить аллокацию в куче но применить к ней стековые
алгоритмы очистки.
тогда она рискует из кучи превратиться в стек :)

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

ура, кажется кто-то начал что-то подозревать :)
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271310
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИзопропилпропущено...

тогда она рискует из кучи превратиться в стек :)

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

По поводу JVM. Я наблюдал ее активности через графики JVisualVM и пришел к следующему.
Есть мысль что необходимо минимизировать миграцию обЪектов Eden->Survival(0|1)->Old.
А чтоб минимизировать нужно фактически детектировать ЧТО за объекты постоянно прыгают
из Эдемского сада в "старички". Или что за алгоритм их продуцирует.

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

ну так эти объекты-в мирке тоже умирают иногда, как их чистить-то, если их - сотни гигабайт?


хотя идея о неком анализаторе, когда объект по природе краткоживущий вдруг перекочевал в долгоживущие - это да.
ну так это и самому можно сделать, завести себе timestamp поле, и анализировать его время от времени, вываливая в лог ругань при превышении нормативного времени жизни в чем проблема-то?
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271332
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaхотя идея о неком анализаторе, когда объект по природе краткоживущий вдруг перекочевал в долгоживущие - это да.
ну так это и самому можно сделать, завести себе timestamp поле, и анализировать его время от времени, вываливая в лог ругань при превышении нормативного времени жизни в чем проблема-то?
Давай исходить из предположения что у меня неизвестное приложение. Про БД и ORM - ничего не известно.
И я использую закрытые сущности из других библиотек. И куда я буду добавлять этот
timestamp? И каким образом? Расширить? Инкапсулировать? В какой момент времени
и кто будет проверять этот timestamp?

Я не против анализатора но мне неясен механизм.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271334
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nojavaу тебя дыра в общего характера знаниях.

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

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


даже вариант MxN - M серверов приложений на N баз данных - уже тупиковый, потому что каждый сервер баз данных должен поддерживать M сосединений.
сервер приложений и база данных должны иметь связь 1:1 и только, иначе никакого масштабирования не будет, ваш КО

а раз 1:1 - то ... какие претензии к имению одного локального сервера баз данных (а все остальное - уже коммуникации на уровне веб сервисов).

простая же истина
Чувак эта тема очень интересная - но я тебя прошу. Отдельным топиком. Поднимай тему и задавай свой вопрос.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271339
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧувак эта тема очень интересная - но я тебя прошу. Отдельным топиком. Поднимай тему и задавай свой вопрос.

Все что тебе нужно сделать - это самому себе - "да, я вообще не разбираюсь в масштабировании". И никаких отдельных топиков не нужно.
Другим это понятно уже давно :)
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271341
nojava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonnojavaхотя идея о неком анализаторе, когда объект по природе краткоживущий вдруг перекочевал в долгоживущие - это да.
ну так это и самому можно сделать, завести себе timestamp поле, и анализировать его время от времени, вываливая в лог ругань при превышении нормативного времени жизни в чем проблема-то?
Давай исходить из предположения что у меня неизвестное приложение. Про БД и ORM - ничего не известно.
И я использую закрытые сущности из других библиотек. И куда я буду добавлять этот
timestamp? И каким образом? Расширить? Инкапсулировать? В какой момент времени
и кто будет проверять этот timestamp?

Я не против анализатора но мне неясен механизм.

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

А очистка происходит ествественным путем - на выходных сервер перезагружается, память чистится так сказать естественным путем.

Java она такая java.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271460
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМда... если смешивать много malloc и aalloc то у нас будет пухнуть оба сегментаЗабудьте про сегменты.
Если исключить экзотику вроде DOS и той же OS/2, CS == DS == SS == FS.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39271511
GCjavaABA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У сборщика мусора в Java есть одно серьёзное преимущество - не нужны hazard pointers для реализации Lock-free алгоритмов, т.к. не возникает ABA-проблемы за исключением редких случаев. Это актуально для архитектур типа x86_64, где нет LL/SC операций.
Для всего остального по всем параметрам лучше или memory-reuse, или детерминированное освобождение памяти через smart-pointers.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273717
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На хабре статья вышла про эволюцию сборщика мусора в Go

У меня вопрос появился: почему никто не развивает работу со счетчиками ссылок? Или как там оно правильно называется. По сути как смарт-указатели из С++. Еще WinAPI использует для работы с объектами ядра.
Технически реализация не сложная: присвоил ссылку на объект переменной сделал Счетчик++, освободил - Счетчик--. Получил 0, запустил деструктор.
Плюсы очевидны:
1. Объект уничтожается именно тогда, когда он стал не нужен, т.е. можно управлять этим процессом, не получая остановку проги сборщиком в самый напряженный момент.
2. Возможен полноценный деструктор, а не малоприменимое недоразумение в виде финализатора, который неизвестно когда будет вызван сборщиком мусора.
Минусы:
1. Постоянное изменение счетчика. Плюс надо атомарность соблюдать, т.к. сейчас все ЯП многопоточные.
2. Память под счетчик. 4 байта на объект может быть критично при большом количестве маленьких объектов.

По моему минусы не такие уж и серьезные. Но, как понимаю они перевешивают плюсы раз большинство ЯП используют сборку мусора.
Теоретически в любом ЯП со сборщиком мусора можно безболезненно заменить его на использование счетчиков ссылок, и это никак не потребует переписывания кода на этом ЯП, но никто не пытается. Интересно почему?
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273769
GCjavaABA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНа хабре статья вышла про эволюцию сборщика мусора в Go

У меня вопрос появился: почему никто не развивает работу со счетчиками ссылок? Или как там оно правильно называется. По сути как смарт-указатели из С++. Еще WinAPI использует для работы с объектами ядра.
Технически реализация не сложная: присвоил ссылку на объект переменной сделал Счетчик++, освободил - Счетчик--. Получил 0, запустил деструктор.
Плюсы очевидны:
1. Объект уничтожается именно тогда, когда он стал не нужен, т.е. можно управлять этим процессом, не получая остановку проги сборщиком в самый напряженный момент.
2. Возможен полноценный деструктор, а не малоприменимое недоразумение в виде финализатора, который неизвестно когда будет вызван сборщиком мусора.
Минусы:
1. Постоянное изменение счетчика. Плюс надо атомарность соблюдать, т.к. сейчас все ЯП многопоточные.
2. Память под счетчик. 4 байта на объект может быть критично при большом количестве маленьких объектов.

По моему минусы не такие уж и серьезные. Но, как понимаю они перевешивают плюсы раз большинство ЯП используют сборку мусора.
Теоретически в любом ЯП со сборщиком мусора можно безболезненно заменить его на использование счетчиков ссылок, и это никак не потребует переписывания кода на этом ЯП, но никто не пытается. Интересно почему?
А как GC считает количество ссылок, он без счетчиков, по стеку каждого потока бегает?

Бывает 2 основных вида smart-pointers:
1. shared pointers (std::shared_ptr<>) - на каждый указатель по 1 атомарному счетчику ссылок (8 bytes), использует медленные CAS-операции - ядро CPU замирает на 1000 тактов
2. hazard pointers - на каждый указатель по ~1-4*threads дополнительных указателей (8-32 bytes per thread), использует быстрые MOV-операции, сильно быстрее для многопоточных программ и оптимизируются внеочередным исполнением на CPU

В ЯП с GC не пытаются переписать на указатели типа 1 (shared pointers) со счетчиком, т.к. без культуры использование общих между потоками указателей со счетчиком в многопоточной программе приведет к её замедлению.

Почему ЯП с GC не пытаются переписать на указатели типа 2 (hazard pointers)? Вот как раз GC примерно так и работает, за исключением того, что hazard pointers сборщик мусора управляемый и сегментированный:
- есть возможность детерминировано вручную запускать сборку мусора вызовом функции Scan()
- для каждого контейнера обычно создается свой сборщик мусора (своя структура hazard pointers)
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273781
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GCjavaABAА как GC считает количество ссылок, он без счетчиков, по стеку каждого потока бегает?
бегает. и за процессорными регистрами следит
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273811
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GCjavaABAА как GC считает количество ссылок, он без счетчиков, по стеку каждого потока бегает?
Глубоко не вникал, но как понимаю у GC нет необходимости знать сколько ссылок на объект, достаточно флага: есть ссылки/нет ссылок.

GCjavaABAиспользует медленные CAS-операции - ядро CPU замирает на 1000 тактов
Как вариант: две lock-free очереди, в одну пишем указатель на объект для увеличения счетчика, во вторую уменьшение и отдельный поток на разгребание этих очередей. Только у него доступ ко всем счетчикам. Тогда не надо никакой атомарности. Можно общую очередь сделать, писать туда указатель и флаг +/-. Правда при таком подходе теряем полноценный деструктор, т.к. все равно будет задержка и запуск в другом потоке.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273812
GCjavaABA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилGCjavaABAА как GC считает количество ссылок, он без счетчиков, по стеку каждого потока бегает?
бегает. и за процессорными регистрами следит
А есть возможность вызвать функцию принудительного сбора мусора?
И есть ли возможность (вручную указывать) заносить ссылки в разные сегменты сборщика мусора, чтобы очищать только заданные сегменты?
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273820
GCjavaABA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TGCjavaABAА как GC считает количество ссылок, он без счетчиков, по стеку каждого потока бегает?
Глубоко не вникал, но как понимаю у GC нет необходимости знать сколько ссылок на объект, достаточно флага: есть ссылки/нет ссылок.

GCjavaABAиспользует медленные CAS-операции - ядро CPU замирает на 1000 тактов
Как вариант: две lock-free очереди , в одну пишем указатель на объект для увеличения счетчика, во вторую уменьшение и отдельный поток на разгребание этих очередей. Только у него доступ ко всем счетчикам. Тогда не надо никакой атомарности. Можно общую очередь сделать, писать туда указатель и флаг +/-. Правда при таком подходе теряем полноценный деструктор, т.к. все равно будет задержка и запуск в другом потоке.
"есть ссылки/нет ссылок" - кто-то этот флаг должен поставить, а этот кто-то как-то должен быть уверен, что больше ссылок нет в других потоках.

Да, выше у меня опечатка, shared_ptr использует не CAS in loop (lock-free), а RMW-операцию (wait-free).
Т.е. вместо одного wait-free (1000 тактов) счетчика использовать 2 lock-free очереди ( кол-во конкурентных потоков х 2 x 1000 тактов), в чем профит?
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273822
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TGCjavaABAиспользует медленные CAS-операции - ядро CPU замирает на 1000 тактов
Как вариант: две lock-free очереди, в одну пишем указатель на объект для увеличения счетчика, во вторую уменьшение и отдельный поток на разгребание этих очередей. Только у него доступ ко всем счетчикам. Тогда не надо никакой атомарности. Можно общую очередь сделать, писать туда указатель и флаг +/-. Правда при таком подходе теряем полноценный деструктор, т.к. все равно будет задержка и запуск в другом потоке.
Фигню я придумал. В основе lock-free теже атомарные операции. Т.е. никакой разницы в очередь писать или сразу счетчик менять.
Надо затестить правда ли они такие тормозные.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273832
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TDima Tпропущено...

Как вариант: две lock-free очереди, в одну пишем указатель на объект для увеличения счетчика, во вторую уменьшение и отдельный поток на разгребание этих очередей. Только у него доступ ко всем счетчикам. Тогда не надо никакой атомарности. Можно общую очередь сделать, писать туда указатель и флаг +/-. Правда при таком подходе теряем полноценный деструктор, т.к. все равно будет задержка и запуск в другом потоке.
Фигню я придумал. В основе lock-free теже атомарные операции. Т.е. никакой разницы в очередь писать или сразу счетчик менять.
Надо затестить правда ли они такие тормозные.
Если атомарный декремент сделать отложенной операцией то мы можем получить парадокс когда
счетчик ссылок может быть отрицательным.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273842
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли атомарный декремент сделать отложенной операцией то мы можем получить парадокс когда
счетчик ссылок может быть отрицательным.
Это легко решается: проверять значения счетчиков когда пуста очередь плюсования.
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273847
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TФигню я придумал. В основе lock-free теже атомарные операции. Т.е. никакой разницы в очередь писать или сразу счетчик менять.
Надо затестить правда ли они такие тормозные.
Там даже не в атомарности дело, а в том что как только возникает второй поток, то это ничем не лучше GC, потому что имеет все те же недостатки что и GC (в частности асинхронность удаления), в добавок к недостаткам смартуказателей ))

Вообще кроме перечисленных выше недостатков смартуказателей самый главный это невозможность автоматического отслеживания циклических ссылок.
Поэтому в языках где поставлена задача минимизировать мысли программиста и делают GC а не смартуказатели. Считается что программист не способен выбрать между shared_ptr и weak_ptr чтобы вручную убрать циклы. Вероятно создатели этих языков судят по себе
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273864
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТам даже не в атомарности дело, а в том что как только возникает второй поток, то это ничем не лучше GC, потому что имеет все те же недостатки что и GC (в частности асинхронность удаления), в добавок к недостаткам смартуказателей ))
Лучше хотя бы тем что поток полностью асинхронный и не требует прерывания основного. С ядрами нынче проблем нет. В основном проблемы чем бы их занять.

Anatoly MoskovskyВообще кроме перечисленных выше недостатков смартуказателей самый главный это невозможность автоматического отслеживания циклических ссылок.
Это я как-то упустил. Тоже серьезный минус при кривых руках :)
...
Рейтинг: 0 / 0
Тяпничный идеальный сборщик мусора
    #39273874
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько вообще проблема циклических ссылок актуальна?

Ну... не в рамках теоретических рассуждений. А из практики.
Кто может сказать что он напоролся на Cyclic reference и к
чему это приводило?
...
Рейтинг: 0 / 0
25 сообщений из 87, страница 3 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный идеальный сборщик мусора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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