powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / сборщик мусора и языки
32 сообщений из 32, показаны все 2 страниц
сборщик мусора и языки
    #39456646
qq2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во многих языках со встроеным сборщиком мусора(c#,java,python) есть проблемы производительности,
вызваные работой этого сборщика мусора. В c++ backend используются простейшие по устройству SmartPointer'ы
- и всё ок. Почему подобный подход не используется или не применим к языкам, упомянутым в начале?
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456649
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное со SmartPoint-ерами не все ОК.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456657
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не все ОК, есть проблема с циклическими ссылками.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456662
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmartPointer - это же reference counting? В Питоне он вроде до сих пор используется. В джаве, вроде, решили, что дешевле прибивать поколения, чем у каждого ссылки считать.
И обычно проблемы не в сборщике мусора, а в алгоритмах.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456670
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНе все ОК, есть проблема с циклическими ссылками.
Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456684
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YesSqlDima TНе все ОК, есть проблема с циклическими ссылками.
Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr
Hello, World!
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456692
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно начать с того, что не у всех есть стековая память.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456716
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglМожно начать с того, что не у всех есть стековая память.
У кого нет? )
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456746
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YesSqlDima TНе все ОК, есть проблема с циклическими ссылками.
Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr
Вот уже начинаются проблемы -- различные типы поинтеров. Добавь к этому ещё кастомные делитеры и проблемы, решаемые через secret ctor . Подгнило что-то в Датском королевстве, поэтому эти ваши сисярпы/явы и не запариваются по этому поводу.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456748
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySiemarglМожно начать с того, что не у всех есть стековая память.
У кого нет? )AFAIK классы c#, явы и питона хранятся исключительно в хипе.

структуры c#, временные ссылки (т.е. указатели) - на стеке. но это явно меньшее количество данных
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456764
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qq2017,

достаточно заглянуть в Википедию: Подсчёт ссылок . Подсчёт ссылок может ухудшать производительность, по сравнению со сборкой мусора. И могут быть проблемы с циклическими ссылками.

В английской Вики расписано намного подробнее: Reference counting . Например, интересен взвешенный подсчёт ссылок.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456772
Alexander A. SakSmartPointer - это же reference counting? В Питоне он вроде до сих пор используется. В джаве, вроде, решили, что дешевле прибивать поколения, чем у каждого ссылки считать.
И обычно проблемы не в сборщике мусора, а в алгоритмах.
В Питоне сразу два способа очищения памяти: старый - ref-counting, и новый - garbage collector чтобы подчищать за циклическими ссылками.
Для веб часто третий способ используют - периодически грохать процессы.
О том, как в Instagram отключили сборщик мусора Python и начали жить
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456784
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikqq2017,

достаточно заглянуть в Википедию: Подсчёт ссылок . Подсчёт ссылок может ухудшать производительность, по сравнению со сборкой мусора. И могут быть проблемы с циклическими ссылками.

В английской Вики расписано намного подробнее: Reference counting . Например, интересен взвешенный подсчёт ссылок.

Может ухудшить. Тут нужна аккуратность, как и вообще с С++.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456786
YesSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZYesSqlпропущено...

Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr
Вот уже начинаются проблемы -- различные типы поинтеров. Добавь к этому ещё кастомные делитеры и проблемы, решаемые через secret ctor . Подгнило что-то в Датском королевстве, поэтому эти ваши сисярпы/явы и не запариваются по этому поводу.
Это не подгнило. Это говорит о возможностях кастомизации и контроля над поведением приложения.
Кому-то нужен cisco router а кому-то и asus за глаза.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456822
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcМожет ухудшить. Тут нужна аккуратность, как и вообще с С++.

AFAIK Java и C#
ОЧЕНЬ быстро выделяют память, new работает почти мгновенно, но соответственно могут очень долго ее чистить (gc)

C, C++
Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete)

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

AFAIK Java и C#
ОЧЕНЬ быстро выделяют память, new работает почти мгновенно, но соответственно могут очень долго ее чистить (gc)

C, C++
Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete)

И у того и у другого есть свои плюсы и минусы )))
Я имел ввиду смарт указатели. Что касается аллокатора то говорить о том что он медленный нет никакого смысла. В языках С и С++ его нет вообще.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456844
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglAFAIK классы c#, явы и питона хранятся исключительно в хипе.

структуры c#, временные ссылки (т.е. указатели) - на стеке. но это явно меньшее количество данных
Но стековая память-то есть ))
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456886
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevOoCcМожет ухудшить. Тут нужна аккуратность, как и вообще с С++.

AFAIK Java и C#
ОЧЕНЬ быстро выделяют память, new работает почти мгновенно, но соответственно могут очень долго ее чистить (gc)

C, C++
Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete)

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

А локальных одноразовых переменных на порядок больше, чем долговременных.

В итоге, виноват GC, что ему насовали столько, что не обработать.... А не криволапная концепция языка, которая все сует в Хип

Anatoly MoskovskySiemarglAFAIK классы c#, явы и питона хранятся исключительно в хипе.

структуры c#, временные ссылки (т.е. указатели) - на стеке. но это явно меньшее количество данных
Но стековая память-то есть ))
Стековая память есть везде, где процессор это позволяет. Вроде бы все современные +-10лет к этому пришли.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456892
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglСтековая память есть везде, где процессор это позволяет
там где не позволяет - тож есть - IBM/360+ например
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456897
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSiemarglСтековая память есть везде, где процессор это позволяет
там где не позволяет - тож есть - IBM/360+ напримерИзвините, не некромант. Живых не видел тоже
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456992
qq2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за ответы!
Всё оказалось не так просто. Хочется уточнить более интересный с практической точки зрения момент:

Допустим есть приложение(например бэкэнд), написаный:
1) На С++ без явного управления памятью - только стэковая память и объекты со счётчиком ссылок(shared_ptrы и т.п)
2) То же самое на обычном языке со сборщиком мусора(C#/java/python)

Будет ли первый вариант лучше/не хуже в большинстве случаев?
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456994
qq2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SiemarglВ итоге, виноват GC, что ему насовали столько, что не обработать.... А не криволапная концепция языка, которая все сует в Хип

Кстати, D в этом вопросе отличается от других?
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39456995
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qq2017SiemarglВ итоге, виноват GC, что ему насовали столько, что не обработать.... А не криволапная концепция языка, которая все сует в Хип

Кстати, D в этом вопросе отличается от других?Поменяли к худшему - как в шарпе - структуры на стеке, классы в хипе (
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457018
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qq2017Почему подобный подход не используется или не применим к языкам, упомянутым в начале?Потому что парадигма. Когда язык разрабатывался, решили, что у нас в основе будет это, это и это. Безопасной работы с памятью в сях не было, разработчики языка решили сделать всем хорошо и сразу. В общем, явщики упирают в скрытие деталей и быструю разработку и сожрать всю память на сервере, плюсовики - в оптимизацию и гибкость. На плюсах можно быстро сделать яву, а вот на яве плюсы - неее
В плюсах, кстати, уже есть библиотеки сборщиков мусора. Тут где-то 2-3 в пример приводили.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457050
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevC, C++
Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete)
с чего вдруг такое?
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457131
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglПроблема в другом - там где можно обойтись стековым размещением, тебя принуждают к хипу.

Ну это да. Но это сейчас во всех языках такое
Объект на объекте, шаблон на шаблоне, паттерн на паттерне сидит и паторном погоняет

Сейчас популярны immutable объекты. Все immutable. Нужны были вычисления над датой/временем - жесть. Любая операция, immutable объект, создавайте новый. Пришлось стандартные классы выбросить в помойку, взять библиотеку которая поддерживает нормальные muttable объекты.

При такой концепции, ты хоть в стеке их выделяй, хоть в хипе ))) Результат будет одинаковый

В Java ввели ByteBuffer'ы вне heap'а. По доке, якобы для того, что бы при вводе-выводе через NIO ф-ции избегать лишнего копирования из памяти в память.... Блин... смотрел реальный код, реальной библиотеки... все стало еще хуже. В процессе ввода-вывода, копирований туда-сюда-обратно из одного ByteBuffer'а в другой, минимум 3-5 раз происходит. (Apache HTTP Components, NIO)

Работа со стандартными объектами, например строками. Все поля private. Объекты immutable. Хочешь получить доступ банально к массиву символов, что бы codepage преобразовать... ан нет... фигушки... private, инкапсуляция... сделайте новый массив и скопируйте

Думаешь, что это ты сам дурак..... смотришь чужой код в I-net'е, в коде один сплошной Unsafe пакет ))) Что ни чих, то недокументированный Unsafe )))

SiemarglА локальных одноразовых переменных на порядок больше, чем долговременных.

Поэтому есть eden и old gen области. С разными GC алгоритмами

Только, хорошо бы, что бы разработчики о них знали и настраивали под свое приложение, а максимум, закладывали в архитектуру системы.

А когда подход к настройке enterprise серверов:
"Там автоматик мемори менеджмент, Oracle умный, ему виднее" ( C ) админ Oracle Database
то и результат соответствующий

kealon(Ruslan)Leonid KudryavtsevC, C++
Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete)
с чего вдруг такое?
А сейчас что-то изменилось?
Лет 10 назад, операции new и delete в C не были "бесплатными". В отличие от Java, C#.

Поэтому на ряде тестов ))) С#-ты радостно кричали: "смотрите какой у нас быстрый язык, C полный отстой" )))
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457134
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qq2017только стэковая память и объекты со счётчиком ссылок(shared_ptrы и т.п)

Вы уж определитесь: или только стековая память и без heap'а или heap )))
qq20172) То же самое на обычном языке со сборщиком мусора(C#/java/python)

1. То же самое не получится. По __определению__.
2. Все зависит от кривизны рук программиста

В случае реализации паттерна "сортировка пузырьком" - разницы не будет.
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457190
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevkealon(Ruslan)пропущено...

с чего вдруг такое?
А сейчас что-то изменилось?
Лет 10 назад, операции new и delete в C не были "бесплатными". В отличие от Java, C#.

Поэтому на ряде тестов ))) С#-ты радостно кричали: "смотрите какой у нас быстрый язык, C полный отстой" )))
ну как бы с delete понятно, в случае шарпов и яв её выполнение откладывает на "благополучное потом", а вот new то тот же самый
а он как раз самый затратный
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457192
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)а вот new то тот же самый
а он как раз самый затратный
new - просто увеличение указателя вместо поиска оптимального участка
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457309
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил...
new - просто увеличение указателя вместо поиска оптимального участка
В Java там теперь зачем-то еще блокировки ставят

Они в спецификацию какую-то хреномунтию наворотили для immutable объектов с final полями

Вроде new для ситуации immutable объекта когда все поля final атомарна по определению и не требует synchronized{ }. Но я в этих дебрях "плаваю". Читал просто какой-то ресеарчь от авторов Java, где они разбирались, сколько же в результате они из-за этого в производительности потеряли на разных типах процов.

Особенно мне понравилось место по середине, где они английским по белому написали "б№;%#дь, там мы здесь же в коде new ошиблись и не ту инструкцию синхронизации используем" ))), после чего я понял, что моих поверхностных познаний по блокировкам достаточно.... нафиг их улучшать, если даже авторы java тоже в них ошибаются )))

В общем, закрыл книжки, скопи пастил из I-net работающую Single Producer Single Consumer очередь и на этом успокоился )))
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39457637
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилkealon(Ruslan)а вот new то тот же самый
а он как раз самый затратный
new - просто увеличение указателя вместо поиска оптимального участка
в современных менеджерах памяти то же самое почти
затести, 40 млн. выделений/сек выдаёт на 4+ потоках?
...
Рейтинг: 0 / 0
сборщик мусора и языки
    #39458051
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)....
в современных менеджерах памяти то же самое почти
затести, 40 млн. выделений/сек выдаёт на 4+ потоках?

Приводи код теста (+ желательно скомпилированный бинарник под Windows, у меня C на компе не стоит)
Затестим

А пока, 40 миллионов сферических коней. Мне вакуум на них тратить жалко.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / сборщик мусора и языки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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