Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Во многих языках со встроеным сборщиком мусора(c#,java,python) есть проблемы производительности, вызваные работой этого сборщика мусора. В c++ backend используются простейшие по устройству SmartPointer'ы - и всё ок. Почему подобный подход не используется или не применим к языкам, упомянутым в начале? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 17:54 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Наверное со SmartPoint-ерами не все ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 18:28 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Не все ОК, есть проблема с циклическими ссылками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 19:14 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
SmartPointer - это же reference counting? В Питоне он вроде до сих пор используется. В джаве, вроде, решили, что дешевле прибивать поколения, чем у каждого ссылки считать. И обычно проблемы не в сборщике мусора, а в алгоритмах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 19:27 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Dima TНе все ОК, есть проблема с циклическими ссылками. Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 20:01 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
YesSqlDima TНе все ОК, есть проблема с циклическими ссылками. Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr Hello, World! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 20:31 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Можно начать с того, что не у всех есть стековая память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 20:53 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
SiemarglМожно начать с того, что не у всех есть стековая память. У кого нет? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2017, 22:40 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
YesSqlDima TНе все ОК, есть проблема с циклическими ссылками. Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr Вот уже начинаются проблемы -- различные типы поинтеров. Добавь к этому ещё кастомные делитеры и проблемы, решаемые через secret ctor . Подгнило что-то в Датском королевстве, поэтому эти ваши сисярпы/явы и не запариваются по этому поводу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 00:21 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySiemarglМожно начать с того, что не у всех есть стековая память. У кого нет? )AFAIK классы c#, явы и питона хранятся исключительно в хипе. структуры c#, временные ссылки (т.е. указатели) - на стеке. но это явно меньшее количество данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 00:22 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
qq2017, достаточно заглянуть в Википедию: Подсчёт ссылок . Подсчёт ссылок может ухудшать производительность, по сравнению со сборкой мусора. И могут быть проблемы с циклическими ссылками. В английской Вики расписано намного подробнее: Reference counting . Например, интересен взвешенный подсчёт ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 01:31 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Alexander A. SakSmartPointer - это же reference counting? В Питоне он вроде до сих пор используется. В джаве, вроде, решили, что дешевле прибивать поколения, чем у каждого ссылки считать. И обычно проблемы не в сборщике мусора, а в алгоритмах. В Питоне сразу два способа очищения памяти: старый - ref-counting, и новый - garbage collector чтобы подчищать за циклическими ссылками. Для веб часто третий способ используют - периодически грохать процессы. О том, как в Instagram отключили сборщик мусора Python и начали жить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 02:38 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
petalvikqq2017, достаточно заглянуть в Википедию: Подсчёт ссылок . Подсчёт ссылок может ухудшать производительность, по сравнению со сборкой мусора. И могут быть проблемы с циклическими ссылками. В английской Вики расписано намного подробнее: Reference counting . Например, интересен взвешенный подсчёт ссылок. Может ухудшить. Тут нужна аккуратность, как и вообще с С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 08:29 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
NekZYesSqlпропущено... Это сильно надуманная проблема новичков. Для этого в паре со shared_ptr идет weak_ptr Вот уже начинаются проблемы -- различные типы поинтеров. Добавь к этому ещё кастомные делитеры и проблемы, решаемые через secret ctor . Подгнило что-то в Датском королевстве, поэтому эти ваши сисярпы/явы и не запариваются по этому поводу. Это не подгнило. Это говорит о возможностях кастомизации и контроля над поведением приложения. Кому-то нужен cisco router а кому-то и asus за глаза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 09:04 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
OoCcМожет ухудшить. Тут нужна аккуратность, как и вообще с С++. AFAIK Java и C# ОЧЕНЬ быстро выделяют память, new работает почти мгновенно, но соответственно могут очень долго ее чистить (gc) C, C++ Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete) И у того и у другого есть свои плюсы и минусы ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 11:54 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevOoCcМожет ухудшить. Тут нужна аккуратность, как и вообще с С++. AFAIK Java и C# ОЧЕНЬ быстро выделяют память, new работает почти мгновенно, но соответственно могут очень долго ее чистить (gc) C, C++ Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete) И у того и у другого есть свои плюсы и минусы ))) Я имел ввиду смарт указатели. Что касается аллокатора то говорить о том что он медленный нет никакого смысла. В языках С и С++ его нет вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 13:29 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
SiemarglAFAIK классы c#, явы и питона хранятся исключительно в хипе. структуры c#, временные ссылки (т.е. указатели) - на стеке. но это явно меньшее количество данных Но стековая память-то есть )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 13:38 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevOoCcМожет ухудшить. Тут нужна аккуратность, как и вообще с С++. AFAIK Java и C# ОЧЕНЬ быстро выделяют память, new работает почти мгновенно, но соответственно могут очень долго ее чистить (gc) C, C++ Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete) И у того и у другого есть свои плюсы и минусы ))) Проблема в другом - там где можно обойтись стековым размещением, тебя принуждают к хипу. А локальных одноразовых переменных на порядок больше, чем долговременных. В итоге, виноват GC, что ему насовали столько, что не обработать.... А не криволапная концепция языка, которая все сует в Хип Anatoly MoskovskySiemarglAFAIK классы c#, явы и питона хранятся исключительно в хипе. структуры c#, временные ссылки (т.е. указатели) - на стеке. но это явно меньшее количество данных Но стековая память-то есть )) Стековая память есть везде, где процессор это позволяет. Вроде бы все современные +-10лет к этому пришли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 16:57 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
SiemarglСтековая память есть везде, где процессор это позволяет там где не позволяет - тож есть - IBM/360+ например ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 17:16 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
ИзопропилSiemarglСтековая память есть везде, где процессор это позволяет там где не позволяет - тож есть - IBM/360+ напримерИзвините, не некромант. Живых не видел тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2017, 17:31 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Благодарю за ответы! Всё оказалось не так просто. Хочется уточнить более интересный с практической точки зрения момент: Допустим есть приложение(например бэкэнд), написаный: 1) На С++ без явного управления памятью - только стэковая память и объекты со счётчиком ссылок(shared_ptrы и т.п) 2) То же самое на обычном языке со сборщиком мусора(C#/java/python) Будет ли первый вариант лучше/не хуже в большинстве случаев? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 00:32 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
SiemarglВ итоге, виноват GC, что ему насовали столько, что не обработать.... А не криволапная концепция языка, которая все сует в Хип Кстати, D в этом вопросе отличается от других? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 00:36 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
qq2017SiemarglВ итоге, виноват GC, что ему насовали столько, что не обработать.... А не криволапная концепция языка, которая все сует в Хип Кстати, D в этом вопросе отличается от других?Поменяли к худшему - как в шарпе - структуры на стеке, классы в хипе ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 00:39 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
qq2017Почему подобный подход не используется или не применим к языкам, упомянутым в начале?Потому что парадигма. Когда язык разрабатывался, решили, что у нас в основе будет это, это и это. Безопасной работы с памятью в сях не было, разработчики языка решили сделать всем хорошо и сразу. В общем, явщики упирают в скрытие деталей и быструю разработку и сожрать всю память на сервере, плюсовики - в оптимизацию и гибкость. На плюсах можно быстро сделать яву, а вот на яве плюсы - неее В плюсах, кстати, уже есть библиотеки сборщиков мусора. Тут где-то 2-3 в пример приводили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 05:33 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevC, C++ Не очень быстро ))) выделяют (new) и не очень быстро освобождают (delete) с чего вдруг такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 08:37 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
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 полный отстой" ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 10:42 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
qq2017только стэковая память и объекты со счётчиком ссылок(shared_ptrы и т.п) Вы уж определитесь: или только стековая память и без heap'а или heap ))) qq20172) То же самое на обычном языке со сборщиком мусора(C#/java/python) 1. То же самое не получится. По __определению__. 2. Все зависит от кривизны рук программиста В случае реализации паттерна "сортировка пузырьком" - разницы не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 10:45 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevkealon(Ruslan)пропущено... с чего вдруг такое? А сейчас что-то изменилось? Лет 10 назад, операции new и delete в C не были "бесплатными". В отличие от Java, C#. Поэтому на ряде тестов ))) С#-ты радостно кричали: "смотрите какой у нас быстрый язык, C полный отстой" ))) ну как бы с delete понятно, в случае шарпов и яв её выполнение откладывает на "благополучное потом", а вот new то тот же самый а он как раз самый затратный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 11:39 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)а вот new то тот же самый а он как раз самый затратный new - просто увеличение указателя вместо поиска оптимального участка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 11:41 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Изопропил... new - просто увеличение указателя вместо поиска оптимального участка В Java там теперь зачем-то еще блокировки ставят Они в спецификацию какую-то хреномунтию наворотили для immutable объектов с final полями Вроде new для ситуации immutable объекта когда все поля final атомарна по определению и не требует synchronized{ }. Но я в этих дебрях "плаваю". Читал просто какой-то ресеарчь от авторов Java, где они разбирались, сколько же в результате они из-за этого в производительности потеряли на разных типах процов. Особенно мне понравилось место по середине, где они английским по белому написали "б№;%#дь, там мы здесь же в коде new ошиблись и не ту инструкцию синхронизации используем" ))), после чего я понял, что моих поверхностных познаний по блокировкам достаточно.... нафиг их улучшать, если даже авторы java тоже в них ошибаются ))) В общем, закрыл книжки, скопи пастил из I-net работающую Single Producer Single Consumer очередь и на этом успокоился ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 13:28 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
Изопропилkealon(Ruslan)а вот new то тот же самый а он как раз самый затратный new - просто увеличение указателя вместо поиска оптимального участка в современных менеджерах памяти то же самое почти затести, 40 млн. выделений/сек выдаёт на 4+ потоках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2017, 18:17 |
|
||
|
сборщик мусора и языки
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan).... в современных менеджерах памяти то же самое почти затести, 40 млн. выделений/сек выдаёт на 4+ потоках? Приводи код теста (+ желательно скомпилированный бинарник под Windows, у меня C на компе не стоит) Затестим А пока, 40 миллионов сферических коней. Мне вакуум на них тратить жалко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2017, 13:38 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018168]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
163ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 273ms |

| 0 / 0 |
