powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Что не так с Java String и как вы с этим боретесь?
25 сообщений из 293, страница 9 из 12
Что не так с Java String и как вы с этим боретесь?
    #39706612
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706616
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...Кстати в последнее время общаюсь с одним очень нудным математиком.
Этот господин совершенно не может кратко и однозначно ответить на вопрос. Кажется что его в принципе не научили
формулировать мысли кратко. А это - минус.У него случайно не почасовая оплата? =)
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706635
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Нет. Вы покритиковали работу со строками в java.

В том сообщении, на которое вы ответили, я резко раскритиковал статью Шипилева, его манеру изложения и поведение. С кем сравнивать есть - с теми же классиками программирования.

Что касается java, то сложно что то придумать в рамках жестких ограничений:
- строки хранятся в куче
- длина строки не ограничена
- строка иммутабельна
- сборщик мусора

Причем сравнивать не особо есть с чем среди распространенных языков программирования.

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

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

Можно еще обсудить, зачем именно в Java так нужна иммутабельность строк (кроме потокобезопасности).
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706636
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglУ него случайно не почасовая оплата? =)

Ограниченные люди о всех судят по себе. Siemargl выделяется даже не фоне остальных. Не женщина ли случайно?
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706638
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чтобы знать реализацию некоторых оптимизаций
следует делать посты вообще в форум http://www.sql.ru/forum/android

Здесь, в основном форуме Java, гораздо больше умных людей и меньше неумных. У меня вообще создалось впечатление, что в сфере Андроида интеллектуальная температура намного ниже. И сводится все к настройке gradle, параметров в IDE без понимания азов и механизмов, которые мне интересны.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706641
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГотов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания
стоят на работе с БД и Networking.если судить о применение прокладок в виде шаблоизаторов и хибера то стрингбилдел - самое "широкое" место .
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706642
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonГотов спорить на бутылку виски что в обычном ентерпрайзе данная операция не будет узким местом. Там обычно ожидания
стоят на работе с БД и Networking.если судить о применение прокладок в виде шаблоизаторов и хибера то стрингбилдел - самое "широкое" место .
На синтетических бенчмарках вы не докажете что хибер - узкое место.
Узкие места обычно - промахи мимо оптимального execution plan и
просто неверная прикладная логика. Типа вычитывается во много раз
больше entities чем надо для решения данной задачи.

Но стринг-билдер не будет узким местом.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706645
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene Newmayton,
Нет. Вы покритиковали работу со строками в java.

В том сообщении, на которое вы ответили, я резко раскритиковал статью Шипилева, его манеру изложения и поведение. С кем сравнивать есть - с теми же классиками программирования.

Что касается java, то сложно что то придумать в рамках жестких ограничений:
- строки хранятся в куче
- длина строки не ограничена
- строка иммутабельна
- сборщик мусора

Причем сравнивать не особо есть с чем среди распространенных языков программирования.
...
dlang осилишь ?
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706655
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНа синтетических бенчмарках вы не докажете что хибер - узкое место.потому что это будет всё хитро закрыто...
maytonпросто неверная прикладная логика. Типа вычитывается во много раз
больше entities чем надо для решения данной задачи.да , вот это и есть основное .
и все это намного превышает затраты на стрингбилдер....
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706657
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewИ чтобы знать реализацию некоторых оптимизаций
следует делать посты вообще в форум http://www.sql.ru/forum/android

Здесь, в основном форуме Java, гораздо больше умных людей и меньше неумных. У меня вообще создалось впечатление, что в сфере Андроида интеллектуальная температура намного ниже. И сводится все к настройке gradle, параметров в IDE без понимания азов и механизмов, которые мне интересны.
У мобильщиков - арсенал инструментов очень узкий IMHO. И всё их программирование это
сплошная экономия и компромиссы. Баз данных у них нет. I/O - вырожденный. Вобщем лично
для меня как объект для изучения мобильная разработка не особо интересна.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706658
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonНа синтетических бенчмарках вы не докажете что хибер - узкое место.потому что это будет всё хитро закрыто...
maytonпросто неверная прикладная логика. Типа вычитывается во много раз
больше entities чем надо для решения данной задачи.да , вот это и есть основное .
и все это намного превышает затраты на стрингбилдер....
Написать все-объемлющий тест во много раз сложнее чем просто фиксить какую-то конкретную
проблему.

Ты попробуй начни что-то писать тестовое для Хибера и уже в процессе написания окажется что
постановка натянутая и высосанная из грязного пальца. Накладные расходы вообще
начинаются не в хибере а уже в том что объявлена Entity и создан ее экземпляр.

Это то что называется потеря соответствия (impedance mismatch) и после этого уже
бери хоть Хибер хоть любой другой ORM. Уже проиграл.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706662
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
String par[] = param.split("®");
        String[] st = par[1].split(" ");
        StringBuilder sbb = new StringBuilder();
        StringBuilder sy = new StringBuilder();
        for (String sf : st) {
            sy.append(" name like ''%").append(sf).append("%'' and");
        }
        sy.setLength(sy.length() - 4);

        sbb.append(par[0]).append("|<table id='tbl'>");
        try (Connection con = dataSource.getConnection();
                CallableStatement proc = con.prepareCall("{call page1_xxx001_listBox('" + sy.toString() + "')}");) {
            rs = proc.executeQuery();

            int n = 0;
            while (rs.next()) {
                sbb.append("<tr class='tr'><td  data-fn='")
                        .append(++n)
                        .append("' data-id='")
                        .append(rs.getString("id"))
                        .append("'>")
                        .append(rs.getString("name"))
                        .append("</td></tr> ");
            }

            if (n == 0) {
                sbb.setLength(par[0].length() + 1);
            } else {
                sbb.append("</table>");
            }
            userSession.getBasicRemote().sendText(sbb.toString());
        } catch (SQLException | IOException ex) {
            ex.printStackTrace();
        }

...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706670
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи вот пример без прокладок , с использованием 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.
String par[] = param.split("®");
        String[] st = par[1].split(" ");
        StringBuilder sbb = new StringBuilder();
        StringBuilder sy = new StringBuilder();
        for (String sf : st) {
            sy.append(" name like ''%").append(sf).append("%'' and");
        }
        sy.setLength(sy.length() - 4);

        sbb.append(par[0]).append("|<table id='tbl'>");
        try (Connection con = dataSource.getConnection();
                CallableStatement proc = con.prepareCall("{call page1_xxx001_listBox('" + sy.toString() + "')}");) {
            rs = proc.executeQuery();

            int n = 0;
            while (rs.next()) {
                sbb.append("<tr class='tr'><td  data-fn='")
                        .append(++n)
                        .append("' data-id='")
                        .append(rs.getString("id"))
                        .append("'>")
                        .append(rs.getString("name"))
                        .append("</td></tr> ");
            }

            if (n == 0) {
                sbb.setLength(par[0].length() + 1);
            } else {
                sbb.append("</table>");
            }
            userSession.getBasicRemote().sendText(sbb.toString());
        } catch (SQLException | IOException ex) {
            ex.printStackTrace();
        }



Что делает этот кусок кода ?
это риторический вопрос не требующий ответа
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706671
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingЧто делает этот кусок кода ?"риторически" отвечаю
это пример использования стрингбилдера вместо прокладок...
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706673
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewЧто касается java, то сложно что то придумать в рамках жестких ограничений:
- строки хранятся в куче

Строки могут хранится сразу в perm-gen (metaspace). Это фикс для строк которые один раз созданы
и всегда буду существовать.

Eugene- длина строки не ограничена

Чисто технически индексация java.lang.String ограничена 32х разнядным целым со знаком. Тоесть до 2 млрд символов.
Но у меня есть сомнения что это полезный кейс.

А какие ограничения вы хотели ввести? 32k как в PLSQL? Как это постулировать в языке?

Eugene- строка иммутабельна

Вы можете аллоцировать массив символов char[] и очень-очень быстро и много его модифицировать.
Мне сложно представить для этого какую-то полезную задачу. Сама природа строк - последовательная.
Или последовательност-ная.

Несколько лет назад у меня был спор на эту тему где-то в sql.ru и я просил привести мне в качестве
примера любой алгоритм работы со строками где-бы было бы очень строгое обоснование работать
со строками именно так чтобы они были ну ... очень мутабельны. И в качествре конт-позиции
я обещал очень быстро адаптировать их алгоритм к работе с иммутабельностью.

Мне не смогли ответить. И такую задачу мне никто не привел.

Да вы правы по поводу ФП и потокобезопасности. Это тренд нового времени. Нам дешевле доказать
иммутабельность строки и не беспокоиться о синхронизации для 99% случаев. Это разумный выбор.
Те кто не согласны - работают сейчас с С++ строками. Но мне сложно говорить об их проблематике
(я давно не брал в руки шашек) и сложно говорить о том как часто или редко у них крашится
структура данных из-за мультипоточного доступа к строкам.

- сборщик мусора

(здесь я могу пожать плечами)
Тема GC слишком объемна чтобы уложить ее в контекст строк. Она достойна отдельного топика.

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

Я думаю вам будет интересно почитать про то как устроен сборщик мусора в Rust. Мне кажется это близко
к описанному. Я по сабжу еще нечитал. Только аннотации.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706676
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

прошу прощения за критику, и особенно в связи с тем, что я сам java как средство программирования не использую.
Но это - плохой пример беспорядочного проектирования.

Да, он "без прокладок", и с использованием StringBuilderю
Но и с использованием +.
Как это вообще возможно, если ты модельный пример показываешь.

PS
Если ты взял в руки Java, то существо дела не в том, чтобы
"программировать без прокладок" , а, ровно наоборот, в ясном понимании того, какие и как использовать.
То что ты дал себе чес-слово не использовать здесь чужих прокладок,
не освобождает тебя от обязанности создать взамен собственные.
А показанный тобой пример - просто каша в стиле одноразового скрипта.
Это не текст, с любовью выписанный для многократного применения, о чем так печется ООП.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяllemingЧто делает этот кусок кода ?"риторически" отвечаю
это пример использования стрингбилдера вместо прокладок...
Я уже писал в родительском топике что данная задача под профайлером покажет
узкое место на PrepareStatement и ResultSet::next.

Основная 99% нагрузка упадет вообще на SQL-базу данных а не на STDOUT ( StringBuilder ).
И я вангую что там есть места гда можно свернуть строковые операции
в String::format или просто конкатенацию вообще без потери перформанса.

Давайте уже оставим в покое бедный StringBuilder.

Сцепление констант + переменных успешно разруливает компиллятор.

В продуктовом окружении его роль могут успешно заменять FreeMarker, Velocity, или ... мне недавно
рекомедовал кто-то Thy-meleaf и прочие шаблонные движки и генераторы отчотов.

Или сериализаторы типа Avro, Protubuf и прочие если надо просто гонять сущности по сети.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706680
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyНо и с использованием +.я ожидал этого замечания.
да, от этого + можно избавиться, но я его специально оставил, просто для наглядности данной строки.
правильно и ли нет - это вопрос спорный. если потребуется ловля блох в скорости - можно избавиться от этих ++

boobyА показанный тобой пример - просто каша в стиле одноразового скрипта.каша в чем?

boobyЭто не текст, с любовью выписанный для многократного применения, о чем так печется ООП.что можно с ним сделать чтоб это было для многократного применения? написать кучу кода для возникновения тормозов? сделать свою прокладку? шаблонизатор? - нагородить ещё кучу строковых переменных и пр. и пр.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706682
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ я вангую что там есть места гда можно свернуть строковые операции
в String::format или просто конкатенацию вообще без потери перформанса.
по поводу String::format делал, но потеря в скорости была очень значительна.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706683
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonИ я вангую что там есть места гда можно свернуть строковые операции
в String::format или просто конкатенацию вообще без потери перформанса.
по поводу String::format делал, но потеря в скорости была очень значительна.
Покажи где и как сделал.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706685
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя...
что можно с ним сделать чтоб это было для многократного применения? написать кучу кода для возникновения тормозов? ... и пр. и пр.

Если тебе это на сомом деле нужно, есть потребность "что-то с ним сделать",
просто заведи отдельный топик.
С высокой вероятностью тебе помогут.
А пока этот пример всего лишь предполагает копи-паст для совершенно утилитарного кода.
В общем-то это не имеет значения, пока ты владелец кода и он тебя устраивает.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706712
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно + для строк и функции вида Integer.toString объявить устаревшими и выкинуть из языка. Просто затем, чтобы не морочили голову никому.

Копирование блоков текста не очень тяжелая операция. Беспокоит лишний расход памяти на неубранный строковой мусор, а не производительность.

Почитал про указатели в Rust. Понял с первого раз одно - намудрили они изрядно.

Почему бы в Java не сделать операцию выделения памяти в стеке? Хотя бы для избранных классов объектов, вроде построителей строк. Тогда бы они уничтожались автоматически после выхода из функции.

Когда мы делаем строку с помощью StringBuilder, в конце мы ее записываем в String, а объект StringBuilder становится, как правило, мусором. Если бы он был на стеке, автоматически бы очистился без сборщика мусора.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706713
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый класс TmpStringBuilder - с выделением всегда на стеке.

Что имеете против такой идеи?
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706714
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увеличение TmpStringBuilder.Capactiy за счет выделения нового блока равному объему добавляемой памяти (а не всей), на стеке, без освобождения прежнего.
Уменьшение TmpStringBuilder.Capactiy не делает ничего.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706715
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если боимся стеком управлять динамически, сделать объявление таких переменных статическими, сразу после декларации функции.

(ну и хак я предлагаю, покушаюсь на святое - писать в стек).

Ок, пусть это будет отдельный стек, который не смешивается со стеком вызовов. Тогда уж и динамически выделять не страшно.
...
Рейтинг: 0 / 0
25 сообщений из 293, страница 9 из 12
Форумы / Java [игнор отключен] [закрыт для гостей] / Что не так с Java String и как вы с этим боретесь?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]