
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
у го точно потребление памяти меньше джавы?

Eduard
27.06.2017
08:42:53

Серж
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

Серж
27.06.2017
08:58:43
ну там есть вроде переменная окружения
по умолчанию 100%, т.е. столько сколько уже есть выделить

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

Google

Michael
27.06.2017
09:18:36

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

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

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

Michael
27.06.2017
09:39:45

Andrew
27.06.2017
09:40:35

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

Michael
27.06.2017
09:41:50

Valentin
27.06.2017
09:45:37

Andrew
27.06.2017
09:47:16

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
но там есть комментарии Чени и компании именно как это сделано в рантайме Гоу
а там как ОС решит
запусти один экземпляр своего приложения, удали все элементы мапы, отправь в сон приложение, запусти второй экземпляр и посмотри что будет происходить

Andrew
27.06.2017
10:47:40

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 в релиз выложат?

Michael
27.06.2017
12:35:43

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

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

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/TsbdchuCE1 кол-во эл-ов подбирал под свой пк

Andrew
27.06.2017
13:38:40

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

Google

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

Andrew
27.06.2017
13:57:31

Илья
27.06.2017
13:57:39

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

Mike
27.06.2017
14:54:02

Andrew
27.06.2017
14:54:10

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

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