- 1
- 2
https://habr.com/ru/post/449368/
Ко-ко-ко-ко-ко-кой багор )))
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
https://habr.com/ru/post/449368/
Ко-ко-ко-ко-ко-кой багор )))
cmepmop 25.04.2019 14:17 # +1
guest8 25.04.2019 14:35 # −999
cmepmop 25.04.2019 14:37 # −1
guest8 25.04.2019 14:40 # −999
cmepmop 25.04.2019 14:48 # −1
XpeHoTeHb 01.05.2019 16:16 # −1
3.14159265 01.07.2019 13:30 # −1
>Он будет как С++ только очень хуевый
Я ещё джва года назад это ванговал.
Steve_Brown 25.04.2019 16:32 # +1
- А я и нProgram halted due to out of memory exception
bootcamp_dropout 25.04.2019 16:34 # +3
guest8 29.06.2019 04:42 # −999
guest8 25.04.2019 17:44 # −999
guest8 29.06.2019 04:43 # −999
bormand 29.06.2019 07:17 # −1
Чем бы дитя не тешилось, лишь бы графы зависимостей не зацикливало. А с лисами и счётчик ссылок вполне справится.
guest8 25.04.2019 23:30 # −999
guest8 29.06.2019 04:42 # −999
bormand 29.06.2019 09:21 # +2
Да и хуй с ней, если честно. По крайней мере копирование предсказуемо - если я выбираю из гигабайтной строки стометровые куски, я ожидаю что это будет жрать дохуя памяти.
Мне больше нравится схема с явными string (новая строка) и string_ref (ссылка на кусок существующей строки). И лишних копирований нету и бесполезное говно в памяти не копится.
guest8 29.06.2019 13:35 # −999
bormand 29.06.2019 13:49 # +2
А ref версию всегда можно навернуть поверх обычной. Для тех, кому это реально надо.
3.14159265 01.07.2019 18:52 # +1
Так все в яве и наслаждались O(1), а при необходимости явно писали new String (новая строка).
Пока светлые умы не решили починить обезьянам «утечки».
3.14159265 01.07.2019 13:28 # +3
Это ещё в 7й или 8й версии "починили". Теперь trim работает не за няшные O(1), а за O(N).
А что делать?
В случае 100-мегабайтных строк несложно написать свою реализацию CharSequence c ожидаемым поведением.
>а в стате много воды и петросянства ненужново совершенно
habr.com — дальше не читал.
guest8 01.07.2019 17:30 # −999
3.14159265 01.07.2019 18:35 # +1
Вот, те же проблемы в языках с прямым управлением памятью:
http://govnokod.ru/14458#comment214519
Потому кстати у крестухов аллергия от одного слова КУЧА.
На стеке, всё на стеке, лишь бы malloc не тупил и не отдавал null.
3.14159265 01.07.2019 13:44 # +2
Ошибка уже здесь.
Строки из-за своего внутреннего устройства чисто алгоритмически не годятся для мутации гигантских объёмов данных. Там же везде O(N) и копирование вылазит. Например та же конкатенация.
В конечном итоге мы придём к старым-добрым лоу-левел технологиям постраничной адресации в 4k/2Mb. И обёртке в виде CharSequence & Appendable.
Выделяем память chunkами размером в страницу и наслаждаемся O(1) substring, append и малой перепитушнёй размером не больше двух страниц.
guest8 01.07.2019 17:31 # −999
3.14159265 01.07.2019 18:16 # +1
Ведь сперва нужно выделить под массив цельный кусок памяти в гигабайт.
А это не так просто как кажется.
Например, у меня на машине свободно 5-6Gb, а свободного нефрагментированого гигабайта нет.
guest8 01.07.2019 18:18 # −999
3.14159265 01.07.2019 18:23 # +1
Потому сишкобляди/крестушки и используют всякие кастомные аллокаторы вроде jemalloc. Не от хорошей жизни это.
>значит тебя ждет свап
Не совсем. jvm всё-таки держит свободоное место дефрагментированным.
guest8 01.07.2019 18:34 # −999
3.14159265 01.07.2019 18:37 # +1
А фрагментированные объекты, пережившие сборку, копирует в другое место, уже без фрагментации.
*В новых сборщиках оно устроено несколько иначе. Но эти сборщики заточены под 10/100 гигабайтные кучи
3.14159265 01.07.2019 18:50 # +1
Да все знали про это.
Ещё помню очень давно на ГК был пост в стиле
На что было указано, что не факт что это говно. Если s=bigString.substring(...)
Т.к. он выполняет копирование, выделяя новую память.
Когда люди делали такой конструктор, они ведь что-то соображали.
guest8 01.07.2019 18:53 # −999
3.14159265 01.07.2019 18:57 # +1
А они там не пробовали сделать просто new String(pituh)?
guest8 01.07.2019 19:00 # −999
PA3yMHblu_nemyx 01.07.2019 19:14 # +2
guest8 01.07.2019 19:21 # −999
gost 01.07.2019 19:22 # +1
guest8 01.07.2019 19:23 # −999
gost 01.07.2019 19:48 # +1
guest8 01.07.2019 19:49 # −999
KaBauHblu_nemyx 01.07.2019 19:54 # +1
Почтовая рассылка есть?
guest8 01.07.2019 19:55 # −999
guest8 01.07.2019 19:56 # −999
guest8 01.07.2019 19:55 # −999
KaBauHblu_nemyx 01.07.2019 20:00 # +2
Пошлите гонца.
guest8 01.07.2019 20:01 # −999
guest8 01.07.2019 20:30 # −999
guest8 01.07.2019 21:05 # −999
unicorn 02.07.2019 11:45 # +1
Нужно откровение от самого Бога.
nemyx 02.07.2019 20:41 # 0
defecate-plusplus 01.07.2019 21:45 # −1
guestinxo 30.11.2019 00:56 # 0
booratihno 30.11.2019 01:20 # 0
XYPO3BO3 30.11.2019 22:38 # 0
guest8 01.07.2019 21:51 # −999
guest8 01.07.2019 18:56 # −999
3.14159265 01.07.2019 18:58 # +2
Там было что-то короткое new String(str)
Типа такого: http://govnokod.ru/17878#comment269223