@gogolang

Страница 333 из 1630
Ivan
27.06.2017
08:31:54
в смысле может быть такое, но это будет работать неправильно)

Michael
27.06.2017
08:38:01
мьютекс и атомик местами есть в методе Load

Valentin
27.06.2017
08:41:42
Там два раза мапа хранится, одна с атомником только на чтения, вторая с мьютексом для записи

Google
Серж
27.06.2017
08:42:22
у го точно потребление памяти меньше джавы?

Серж
27.06.2017
08:43:36
а может есть статья какая-нибудь? с графиками?

Eduard
27.06.2017
08:44:20
https://benchmarksgame.alioth.debian.org/u64q/go.html

смотри память

Серж
27.06.2017
08:45:42
спасибо, а не на числодробилках сравнение?

а правда что gc не упаковывает память в го и она фрагментируется?

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

Andrew
27.06.2017
08:58:21
а когда памяти не хватает просто берет у системы еще столько же, сколько уже выделенно
Типа потребления памяти в геометрической прогрессии? Сначала 1кб, потом 2кб, затем 4кб и т.д.? ?

Серж
27.06.2017
08:58:43
ну там есть вроде переменная окружения

по умолчанию 100%, т.е. столько сколько уже есть выделить

Andrew
27.06.2017
09:00:18
Я такого не встречал. Из проблем с памятью я только слыхал, что go не чистит мапы от удалённых элементов.

Попробовал, вроде кушает все процы
Мой итог тестов на коленке - mutex замедляет параллельную вставку в мапу в ~2.3 раза по сравнению с последовательной вставкой

Google
Michael
27.06.2017
09:18:36
а правда что gc не упаковывает память в го и она фрагментируется?
Го гц просто берёт данные кредитки хозяина и докупает оперативы у гугли

Andrew
27.06.2017
09:19:31
Michael
27.06.2017
09:19:45
экономика потребления

Серж
27.06.2017
09:20:00
и в виде компенсации заодно заказывает хозяину карты дилду в виде суслика

Michael
27.06.2017
09:21:04
Я такого не встречал. Из проблем с памятью я только слыхал, что go не чистит мапы от удалённых элементов.
не встречал, покрайней мере у меня всё отлично работало, и идиоматичный пример удаления ключей из мапы отрабатывал как и задумано

Andrew
27.06.2017
09:21:39
Только что попробовал на 1.8.3 - залил в мапу кучу элементов. Потом поочереди все удалил из мапы delete'ом. Оперативку обратно go не отдаёт.

Серж
27.06.2017
09:38:38
ладно, это придирки, все равно бинарник в контейнере наверное работает, а память выделяется на контейнер

Andrew
27.06.2017
09:40:35
а код и чем смотрел можно?
Код не могу кинуть, на работе нет тырнетов (( смотрел диспетчером задач винды ))

Серж
27.06.2017
09:40:48
https://deferpanic.com/blog/understanding-golang-memory-usage/

Valentin
27.06.2017
09:45:37
Только что попробовал на 1.8.3 - залил в мапу кучу элементов. Потом поочереди все удалил из мапы delete'ом. Оперативку обратно go не отдаёт.
Го выделяет сколько надо в хипе памяти, а после удаления ресурсов держит у себя, чтобы снова не делать системный вызов "дай мне памяти", го возьмёт место из хипа

Michael
27.06.2017
09:47:31
ну это обычное поведение гц

также если система или что-то попросит памяти, то го гц уменшит размер резерва

Andrew
27.06.2017
10:34:27
также если система или что-то попросит памяти, то го гц уменшит размер резерва
Не слыхал такого, что у программ можно запрашивать память обратно ))

Mike
27.06.2017
10:42:55
Память есть? А если найду?

Michael
27.06.2017
10:43:15
https://github.com/golang/go/issues/14521

статьи не нашёл

Google
Michael
27.06.2017
10:43:47
но там есть комментарии Чени и компании именно как это сделано в рантайме Гоу

а там как ОС решит

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

Michael
27.06.2017
10:48:25
второй будет кушать, первый будет добрым и поделится ресурсом

Лол
27.06.2017
12:18:34
Ну вас нах

Andrew
27.06.2017
12:19:18
Ну вас нах
За что ты нас так ((

Michael
27.06.2017
12:24:50
джава фан?

Vlad
27.06.2017
12:28:17
проверили? так и происходит?

Andrew
27.06.2017
12:29:44
проверили? так и происходит?
Windows 7 - система уходит в swap, оперативу не отдаёт ни один из экземпляров прог. Доберусь до дома, попробую в Linux...

TILTED
27.06.2017
12:34:07
когда liteide x32 в релиз выложат?

Andrew
27.06.2017
12:58:49
покажешь код
примерно через полчасика покажу как тестирую

Vlad
27.06.2017
13:09:20
А еще "доверяй, но проверяй"

Серж
27.06.2017
13:14:29
А еще "зачем пачкать руки самому"

Mike
27.06.2017
13:14:52
А еще, а еще...! ой, да ну вас =(

Andrew
27.06.2017
13:18:57
покажешь код
https://play.golang.org/p/g-kV89MP6z

Google
Vlad
27.06.2017
13:19:18
А еще "зачем пачкать руки самому"
я вроде никого не призывал ничего тестить, это во-первых, во-вторых, я с удовольствие "запачкаюсь" дома, вчером, после работы

Andrew
27.06.2017
13:19:22
Каждый экземпляр проги ест ~600 Mb private bytes

Протестировал под Linux (ARM 32 bit, 1Gb RAM). Каждый экземпляр программы ~300 Mb (из-за меньшей разрядности), третий экземпляр надает с сообщением "недостаточно памяти", никто из экземпляров также оперативу не отдал.

Пробовал варианты как и с delete, так и с map = nil. Эффект тот же :(

Димка
27.06.2017
13:31:46
не знаю насколько это правильно, но можно руками освобождать память debug.FreeOSMemory()

Andrew
27.06.2017
13:33:53
не знаю насколько это правильно, но можно руками освобождать память debug.FreeOSMemory()
Интересно. После вызова отдаёт около 250 Mb из 600, остальное не отдаёт.

Mike
27.06.2017
13:34:10
Добро пожаловать в банковскую систему

Димка
27.06.2017
13:34:49
странно что под Linux не сработало

As I understand, memory is returned to the OS about 5 minutes after is has been marked as free by the GC. And the GC runs every two minutes top, if not triggered by an increase in memory use. So worst-case would be 7 minutes to be freed. In this case, I think that the slice is not marked as freed, but in use, so it would never be returned to the OS.

а вот ещё пишут

что место освободится после 5 минут если оно помеченно как неиспользуемое

вот чел пишет https://stackoverflow.com/a/24377086

Michael
27.06.2017
13:37:45
https://play.golang.org/p/g-kV89MP6z
на Windows 10 & Go 1.9 beta 2 освобождение памяти наблюдается, но система всё же уходит в дикий своп

https://play.golang.org/p/TsbdchuCE1 кол-во эл-ов подбирал под свой пк

hamper ?
27.06.2017
13:45:34
А почему такая фигня у меня происходит? x := map[string]map[string]float64{} ... // тут заполняем x m.Lock() m.i = x m.Unlock() дальше читаю только из m.i с RLock() но детектится рейс при чтении из m.i одновременно с записью в x. Это компилятор решил что можно x не создавать и сразу писать в m.i и вышло что я пишу в него до лока?

если перед созданием x ставлю m.Lock() defer m.Unlock() то все работает

Хотя x это же временная переменная, которую я хочу заполнить медленно и заменить m.i на нее.

Andrew
27.06.2017
13:50:28
Поставил паузу на 10 минут, жду :)
10 минут, никто память не отдал

Google
Димка
27.06.2017
13:52:25
хм...

Andrew
27.06.2017
13:58:03
нужен код, так трудно понять что наворочено ))

hamper ?
27.06.2017
13:58:45
Да в начало запихал этот лок и все нормально стало, просто как-то странновато было.

Michael
27.06.2017
14:14:10
Andrew
27.06.2017
14:14:29
Не, ниотдаёт никто

Видимо российский менталитет - нахпать побольше и не делиться ))

Michael
27.06.2017
14:15:43
сколько физической озу и сколько потребляется каждым процессом?

Andrew
27.06.2017
14:16:28
1 гб, запускаю два процесса по 300 мб

Michael
27.06.2017
14:17:15
ну так там и третий поместится

и четвёртый валетиком

Димка
27.06.2017
14:53:04
1 гб, запускаю два процесса по 300 мб
запускал твой код, и на моей машине занимал ~700Mb памяти. но когда заменил map[int]int на map[string]int стало занимать ~130Mb памяти

Димка
27.06.2017
14:54:38
да, может утечка памяти как раз в том, что ключ числовое значение?

так же работает :(

Серж
27.06.2017
15:06:26
ну уж не на столько ваш гоу днище, что там встроенные типы текут

вопрос в том, что такое стринг в гау, я думаю в гау стринг как и в джаве неизменяемый и если ты вставляешь в мапу один и тот же стринг

память под него выделяется единожды, а вставляешь ты как бы структуру с указателем на содержимое строки

а инт наверное каждый раз на хипе выделяется

такой вот я шерлок холмс

Страница 333 из 1630