|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newвадя, http://qaru.site/questions/61777/how-is-string-concatenation-implemented-in-java-9 Спасибо. Это интересно. Я понял, что можно каким то образом выбирать реализацию конкатенации во время выполнения. Не понятно только одно - каким образом работают предоставляемые варианты, что у них внутри. "Вызывает что то, помещенное внутри java.lang.StringBuilder", что именно это что то делает - не видно. Я возможно забегаю в сторону. Но если вы решили быть разработчиком под Android то здесь надо Шипилёва вообще отодвинуть далеко. И сайты oracle.com в части имплементации машины вообще не читать. Android использует другую JVM. Google-овскую. И чтобы знать реализацию некоторых оптимизаций следует делать посты вообще в форум http://www.sql.ru/forum/android У "мобильщиков" свои hints, tricks. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:51 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton...Кстати в последнее время общаюсь с одним очень нудным математиком. Этот господин совершенно не может кратко и однозначно ответить на вопрос. Кажется что его в принципе не научили формулировать мысли кратко. А это - минус.У него случайно не почасовая оплата? =) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 18:55 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
mayton, Нет. Вы покритиковали работу со строками в java. В том сообщении, на которое вы ответили, я резко раскритиковал статью Шипилева, его манеру изложения и поведение. С кем сравнивать есть - с теми же классиками программирования. Что касается java, то сложно что то придумать в рамках жестких ограничений: - строки хранятся в куче - длина строки не ограничена - строка иммутабельна - сборщик мусора Причем сравнивать не особо есть с чем среди распространенных языков программирования. StringBuilder позволяет работать со строками более-менее неплохо. По крайней мере не перевыделять память на каждый чих, а задать размер этой области заранее. В порядке мозгового штурма напрашивается идея с выделением памяти для строк в отдельной куче отдельным менеджером памяти и подсчетом ссылок с уничтожением этих срок сразу же. Но это может работать только для локальных и временных переменных и поэтому является фигней. Можно еще обсудить, зачем именно в Java так нужна иммутабельность строк (кроме потокобезопасности). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:23 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
SiemarglУ него случайно не почасовая оплата? =) Ограниченные люди о всех судят по себе. Siemargl выделяется даже не фоне остальных. Не женщина ли случайно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:25 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
И чтобы знать реализацию некоторых оптимизаций следует делать посты вообще в форум http://www.sql.ru/forum/android Здесь, в основном форуме Java, гораздо больше умных людей и меньше неумных. У меня вообще создалось впечатление, что в сфере Андроида интеллектуальная температура намного ниже. И сводится все к настройке gradle, параметров в IDE без понимания азов и механизмов, которые мне интересны. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:39 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonГотов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания стоят на работе с БД и Networking.если судить о применение прокладок в виде шаблоизаторов и хибера то стрингбилдел - самое "широкое" место . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:46 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonГотов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания стоят на работе с БД и Networking.если судить о применение прокладок в виде шаблоизаторов и хибера то стрингбилдел - самое "широкое" место . На синтетических бенчмарках вы не докажете что хибер - узкое место. Узкие места обычно - промахи мимо оптимального execution plan и просто неверная прикладная логика. Типа вычитывается во много раз больше entities чем надо для решения данной задачи. Но стринг-билдер не будет узким местом. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:50 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene Newmayton, Нет. Вы покритиковали работу со строками в java. В том сообщении, на которое вы ответили, я резко раскритиковал статью Шипилева, его манеру изложения и поведение. С кем сравнивать есть - с теми же классиками программирования. Что касается java, то сложно что то придумать в рамках жестких ограничений: - строки хранятся в куче - длина строки не ограничена - строка иммутабельна - сборщик мусора Причем сравнивать не особо есть с чем среди распространенных языков программирования. ... dlang осилишь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 19:58 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonНа синтетических бенчмарках вы не докажете что хибер - узкое место.потому что это будет всё хитро закрыто... maytonпросто неверная прикладная логика. Типа вычитывается во много раз больше entities чем надо для решения данной задачи.да , вот это и есть основное . и все это намного превышает затраты на стрингбилдер.... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:15 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewИ чтобы знать реализацию некоторых оптимизаций следует делать посты вообще в форум http://www.sql.ru/forum/android Здесь, в основном форуме Java, гораздо больше умных людей и меньше неумных. У меня вообще создалось впечатление, что в сфере Андроида интеллектуальная температура намного ниже. И сводится все к настройке gradle, параметров в IDE без понимания азов и механизмов, которые мне интересны. У мобильщиков - арсенал инструментов очень узкий IMHO. И всё их программирование это сплошная экономия и компромиссы. Баз данных у них нет. I/O - вырожденный. Вобщем лично для меня как объект для изучения мобильная разработка не особо интересна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonНа синтетических бенчмарках вы не докажете что хибер - узкое место.потому что это будет всё хитро закрыто... maytonпросто неверная прикладная логика. Типа вычитывается во много раз больше entities чем надо для решения данной задачи.да , вот это и есть основное . и все это намного превышает затраты на стрингбилдер.... Написать все-объемлющий тест во много раз сложнее чем просто фиксить какую-то конкретную проблему. Ты попробуй начни что-то писать тестовое для Хибера и уже в процессе написания окажется что постановка натянутая и высосанная из грязного пальца. Накладные расходы вообще начинаются не в хибере а уже в том что объявлена Entity и создан ее экземпляр. Это то что называется потеря соответствия (impedance mismatch) и после этого уже бери хоть Хибер хоть любой другой ORM. Уже проиграл. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonТы попробуй начни что-то писать тестовое для Хибера и уже в процессе написания окажется что постановка натянутая и высосанная из грязного пальца. Накладные расходы вообще начинаются не в хибере а уже в том что объявлена Entity и создан ее экземпляр. Это то что называется потеря соответствия (impedance mismatch) и после этого уже бери хоть Хибер хоть любой другой ORM. Уже проиграл.по этому высказыванию - ты просто выразил то о чем все со мной спорят. я могу только добавить +100500 и вот пример без прокладок , с использованием StringBuilder Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 20:48 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяи вот пример без прокладок , с использованием StringBuilder Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Что делает этот кусок кода ? это риторический вопрос не требующий ответа ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:07 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
llemingЧто делает этот кусок кода ?"риторически" отвечаю это пример использования стрингбилдера вместо прокладок... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:11 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Eugene NewЧто касается java, то сложно что то придумать в рамках жестких ограничений: - строки хранятся в куче Строки могут хранится сразу в perm-gen (metaspace). Это фикс для строк которые один раз созданы и всегда буду существовать. Eugene- длина строки не ограничена Чисто технически индексация java.lang.String ограничена 32х разнядным целым со знаком. Тоесть до 2 млрд символов. Но у меня есть сомнения что это полезный кейс. А какие ограничения вы хотели ввести? 32k как в PLSQL? Как это постулировать в языке? Eugene- строка иммутабельна Вы можете аллоцировать массив символов char[] и очень-очень быстро и много его модифицировать. Мне сложно представить для этого какую-то полезную задачу. Сама природа строк - последовательная. Или последовательност-ная. Несколько лет назад у меня был спор на эту тему где-то в sql.ru и я просил привести мне в качестве примера любой алгоритм работы со строками где-бы было бы очень строгое обоснование работать со строками именно так чтобы они были ну ... очень мутабельны. И в качествре конт-позиции я обещал очень быстро адаптировать их алгоритм к работе с иммутабельностью. Мне не смогли ответить. И такую задачу мне никто не привел. Да вы правы по поводу ФП и потокобезопасности. Это тренд нового времени. Нам дешевле доказать иммутабельность строки и не беспокоиться о синхронизации для 99% случаев. Это разумный выбор. Те кто не согласны - работают сейчас с С++ строками. Но мне сложно говорить об их проблематике (я давно не брал в руки шашек) и сложно говорить о том как часто или редко у них крашится структура данных из-за мультипоточного доступа к строкам. - сборщик мусора (здесь я могу пожать плечами) Тема GC слишком объемна чтобы уложить ее в контекст строк. Она достойна отдельного топика. В порядке мозгового штурма напрашивается идея с выделением памяти для строк в отдельной куче отдельным менеджером памяти и подсчетом ссылок с уничтожением этих срок сразу же. Но это может работать только для локальных и временных переменных и поэтому является фигней. Я думаю вам будет интересно почитать про то как устроен сборщик мусора в Rust. Мне кажется это близко к описанному. Я по сабжу еще нечитал. Только аннотации. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:14 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя, прошу прощения за критику, и особенно в связи с тем, что я сам java как средство программирования не использую. Но это - плохой пример беспорядочного проектирования. Да, он "без прокладок", и с использованием StringBuilderю Но и с использованием +. Как это вообще возможно, если ты модельный пример показываешь. PS Если ты взял в руки Java, то существо дела не в том, чтобы "программировать без прокладок" , а, ровно наоборот, в ясном понимании того, какие и как использовать. То что ты дал себе чес-слово не использовать здесь чужих прокладок, не освобождает тебя от обязанности создать взамен собственные. А показанный тобой пример - просто каша в стиле одноразового скрипта. Это не текст, с любовью выписанный для многократного применения, о чем так печется ООП. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:20 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяllemingЧто делает этот кусок кода ?"риторически" отвечаю это пример использования стрингбилдера вместо прокладок... Я уже писал в родительском топике что данная задача под профайлером покажет узкое место на PrepareStatement и ResultSet::next. Основная 99% нагрузка упадет вообще на SQL-базу данных а не на STDOUT ( StringBuilder ). И я вангую что там есть места гда можно свернуть строковые операции в String::format или просто конкатенацию вообще без потери перформанса. Давайте уже оставим в покое бедный StringBuilder. Сцепление констант + переменных успешно разруливает компиллятор. В продуктовом окружении его роль могут успешно заменять FreeMarker, Velocity, или ... мне недавно рекомедовал кто-то Thy-meleaf и прочие шаблонные движки и генераторы отчотов. Или сериализаторы типа Avro, Protubuf и прочие если надо просто гонять сущности по сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:21 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
boobyНо и с использованием +.я ожидал этого замечания. да, от этого + можно избавиться, но я его специально оставил, просто для наглядности данной строки. правильно и ли нет - это вопрос спорный. если потребуется ловля блох в скорости - можно избавиться от этих ++ boobyА показанный тобой пример - просто каша в стиле одноразового скрипта.каша в чем? boobyЭто не текст, с любовью выписанный для многократного применения, о чем так печется ООП.что можно с ним сделать чтоб это было для многократного применения? написать кучу кода для возникновения тормозов? сделать свою прокладку? шаблонизатор? - нагородить ещё кучу строковых переменных и пр. и пр. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:33 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
maytonИ я вангую что там есть места гда можно свернуть строковые операции в String::format или просто конкатенацию вообще без потери перформанса. по поводу String::format делал, но потеря в скорости была очень значительна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:37 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадяmaytonИ я вангую что там есть места гда можно свернуть строковые операции в String::format или просто конкатенацию вообще без потери перформанса. по поводу String::format делал, но потеря в скорости была очень значительна. Покажи где и как сделал. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:38 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
вадя... что можно с ним сделать чтоб это было для многократного применения? написать кучу кода для возникновения тормозов? ... и пр. и пр. Если тебе это на сомом деле нужно, есть потребность "что-то с ним сделать", просто заведи отдельный топик. С высокой вероятностью тебе помогут. А пока этот пример всего лишь предполагает копи-паст для совершенно утилитарного кода. В общем-то это не имеет значения, пока ты владелец кода и он тебя устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2018, 21:43 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Нужно + для строк и функции вида Integer.toString объявить устаревшими и выкинуть из языка. Просто затем, чтобы не морочили голову никому. Копирование блоков текста не очень тяжелая операция. Беспокоит лишний расход памяти на неубранный строковой мусор, а не производительность. Почитал про указатели в Rust. Понял с первого раз одно - намудрили они изрядно. Почему бы в Java не сделать операцию выделения памяти в стеке? Хотя бы для избранных классов объектов, вроде построителей строк. Тогда бы они уничтожались автоматически после выхода из функции. Когда мы делаем строку с помощью StringBuilder, в конце мы ее записываем в String, а объект StringBuilder становится, как правило, мусором. Если бы он был на стеке, автоматически бы очистился без сборщика мусора. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:26 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Новый класс TmpStringBuilder - с выделением всегда на стеке. Что имеете против такой идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:27 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Увеличение TmpStringBuilder.Capactiy за счет выделения нового блока равному объему добавляемой памяти (а не всей), на стеке, без освобождения прежнего. Уменьшение TmpStringBuilder.Capactiy не делает ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:30 |
|
Что не так с Java String и как вы с этим боретесь?
|
|||
---|---|---|---|
#18+
Если боимся стеком управлять динамически, сделать объявление таких переменных статическими, сразу после декларации функции. (ну и хак я предлагаю, покушаюсь на святое - писать в стек). Ок, пусть это будет отдельный стек, который не смешивается со стеком вызовов. Тогда уж и динамически выделять не страшно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 00:37 |
|
|
start [/forum/moderation_log.php?user_name=hoolygan]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
78ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 888ms |
total: | 1077ms |
0 / 0 |