powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Что не так с Java String и как вы с этим боретесь?
25 сообщений из 293, страница 10 из 12
Что не так с Java String и как вы с этим боретесь?
    #39706716
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По крайней мере если нам надо что то такое страшное со строками творить, будем знать, что все заканчивается после выхода из процедуры и дальше за собой мусор в куче не тянет.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706719
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините за кучу сообщений, постоянно идеи приходят в голову.

Семантика tmp-объектов на стеке - их нельзя возвращать и никогда нельзя ничему присваивать. Расширять на все классы не предлагаю - сложно и ни к чему. Достаточно TmpStringBuilder и может какого-нибудь TmpByteArray - конкретных классов, от которых нельзя наследовать.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706720
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewНовый класс TmpStringBuilder - с выделением всегда на стеке.

Что имеете против такой идеи?
Я не против. Делай. Только пара замечаний.
1) JVM изначально - стековая машина. И любая операция даже будь то сложение регистров int32 проходит через пушинг в стек.
2) Что будешь делать если в процессе работы с TmpStringBuilder тебе надо сделать еще один вызов метода? Опиши состояние стека до и после.
3) Не надо никакой новый класс делать. То что ты делаешь это изменение спецификации JVM
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706721
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewПочитал про указатели в Rust. Понял с первого раз одно - намудрили они изрядно.

Ну ты и быстр. УЖе прочитал? Дай ссылку и мне.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706723
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewПо крайней мере если нам надо что то такое страшное со строками творить, будем знать, что все заканчивается после выхода из процедуры и дальше за собой мусор в куче не тянет.
Давай еще подкину пищу для размышлений. Современный код который занят инициализацией
должен шарить результат своей работы. Твой волшебный билдер который волшебным образом
удаляет сам себя со стека непонятно какую проблему решает. Его результат - тоесть копирование
в строку всё равно должен быть сохранен. Его нельзя убивать сворачиванеим стека.

Если ты считаешь что оптимизировав удаление билдера ты вдруг очень круто помог GC - то я думаю
что здесь ты ошибаешся количественно. От тебя нужен strong justification. Не просто сказать "я так решил"
или "я так думаю". А провести исследования. Собрать макет. Прогнать его на типовых задачах.

В конце должен быть JEP. Давай. Побей Шипилёва.

Go-Go.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706725
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
JVM изначально - стековая машина. И любая операция даже будь то сложение регистров int32 проходит через пушинг в стек.
2) Что будешь делать если в процессе работы с TmpStringBuilder тебе надо сделать еще один вызов метода? Опиши состояние стека до и после.

Навскидку два варианта (о них уже упоминал):

1. Второй стек. независимый от настоящего.
Когда создаем TmpObject - перемещаем указатель вперед и запоминаем, сколько должны вернуть. При выходе из функции сдвигаем указатель на вершину "стека" назад. Настоящий стек это вообще никак не затрагивает.

2. Сделать вместимость TmpObject константой и привязать к объявлению функции.

Код: sql
1.
2.
3.
4.
void MyCoolFunction (int x, int y, double z)
: TmpStringBuilkder [1000] t1, TmpByteArray [123] t2
{
}



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

УЖе прочитал? Дай ссылку и мне.
https://www.ibm.com/developerworks/ru/library/l-rust_08/index.html
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706726
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene New1. Второй стек. независимый от настоящего.
Когда создаем TmpObject - перемещаем указатель вперед и запоминаем, сколько должны вернуть. При выходе из функции сдвигаем указатель на вершину "стека" назад. Настоящий стек это вообще никак не затрагивает.

Стоп-стоп. Подожди. Современный сервернй Java-процесс поднимает до нексольких тысяч Threads.
Каждый Thread будет аллоцировать помимо основного стека еще и твой второй стек.

Сколько-же тебе памяти надо? Какова вероятность что потокам понадобится второй стек?
Беря во внимание частоту использования билдера - вангую что почти всем.

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

Код: java
1.
 Его результат - тоесть копирование в строку всё равно должен быть сохранен.



Если нам надо что то вернуть, а не просто использовать - результат будет сохранен обычным образом - через функцию TmpStringBuilder.toString(). Которая выделить память в обычной куче под неизменяемый String.

На чем экономим? На том, что сам TmpStringBuilder удалится.
Сейчас когда мы используем StringBuilder, он остается в виде мусора и ждет сборщика мусора. А TmpStringBuilder уберется сразу. И мы будем хранить только готовые неизменяемые строки.

Разрешаем TmpStringBuilder передавать по ссылке вниз вызываемым функциям, чтобы в него там можно было что то писать и не требовалось возвращать String для промежуточных результатов.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706728
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene New
Код: sql
1.
2.
3.
4.
void MyCoolFunction (int x, int y, double z)
: TmpStringBuilkder [1000] t1, TmpByteArray [123] t2
{
}


Здесь вообще ничего не понимаю. Откуда взялось число 1000 ? Откуда 123?
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706730
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Какова вероятность что потокам понадобится второй стек?

Второй "стек" не обязательно вызывать на каждый поток. Простейший способ - при создании потока определять, нужен ли ему второй стек. Если поток создан, как поток без второго стека, вызывать Exception времени выполнения при вызове функций с TmpObject-ми.

Не забывай про вариант #2, без второго стека.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706732
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Откуда взялось число 1000 ? Откуда 123?

Константа - размер в символах.

Вроде
Код: sql
1.
2.
char [1000] buf;
byte [123] buf2;
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706733
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подобно тому, как в С++ объявляются статические локальные массивы.
Код: sql
1.
2.
char buf [1000];
byte buf2 [123];
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706734
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eugene NewПростейший способ - при создании потока определять, нужен ли ему второй стек. Если поток создан, как поток без второго стека, вызывать Exception времени выполнения при вызове функций с TmpObject-ми.
Капец какой-то! Это кто будет решать нужен ему поток или нет? Программист?

А зачем еще один Exception? Чтобы программисты заплакали горькими слезами и бежали еще дальше
от таких улучшений?
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706735
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть в варианте два Capacity мы задаем сразу и изменять его не сможем.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706737
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Ок, забудьте пока про вариант №1. Есть еще вариант №2.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706952
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что? Факир был пьян - фокус не удался.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706962
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.P.S.

На самом деле. давно говорил, что в Java очень не хватает разделения кучи между Thread'ами. Т.е. как минимум своя eden-область у каждого Thread'а

поинты следующие:
1. Возможность административно назначить ограничение памяти на уровне Thread'а (application WAR'ника в application server'е):
Теперь код вида
ListArray rubbish = new ListArray();
while ( true) { rubbish.add( new Object() ); }
не сможет "завалить" JVM/application server. Свалиться только Thread/application
2. Можно смотреть статистику потребления памяти на уровне Thread/группа Thread/application
3. Сборка мусора copy-конструктором не будет зависить от "крутости" приложения. Чистим по Thread'ам. Хотя с принципами работы "новых" GC не знаком. G1 уже в эту сторону двигался.
4. Возможность NUMA-дружелюбного алоцирования памяти. Память для Thread'а выделяется на той ноде, где работает Thread.

Проблемы:
1. Нужно как-то уметь понимать и обрабатывать объекты покидающие/могут покинуть (аналог escape-анализа) Thread.
2. Нужна какая-то синхронизация с диспетчером потоков, что бы при миграции потока на другую NUMA-ноду и его Heap мигрировать. Но тут все сложно. Как работает диспетчер потоков и какие алгоритмы закрепления потоков за ядрами/нодами и их миграция - для меня большая загадка. По практике - глюка глюкой, никак с документацией не соотносящаяся ))). А с учетом, что потоки хорошо бы еще и к ядру с обработчиком прерываний сетевого стека прикреплять (RSS Receive-Side Queue) - вооще на докторскую дисертация в области IT тянет ))).
3. Для application сервера вообще вырисовывается дерево heap'ов
application сервер
приложение на сервере (WAR)
thread
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706975
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev2) непонятно, что делать с функциями возвращающими строки. Теоретически, побороться можно, практически - фиг знает как реализовать. Или будет копирование туда-сюда обратно между кадрами стека или нужно память под возвращаемое значение в кадре вызывающей процедуры выделять (и передавать не явным парметром), но опять таки, размем буффера под строку заранее не известен (и даже, может меняться).
У меня была идея о парадигме (близкой к ФП) языка где строк не существует но есть такие себе pure-functions
которые генерируют потоки символов. Типа.
Код: java
1.
Stream<char> formatHexNumber(int arg){ ..}


Накладные расходы минимальны если работает lazy-механизм.
Ну и весь API переколбасить соотв.

Доступ к i-му элементу тоже возможен но это будет как-раз отступление от потоков и движение в
сторону других строк. Неэкономных.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706979
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...о парадигме (близкой к ФП) языка где строк не существует но есть такие себе pure-functions
которые генерируют потоки символов...

Ты представляешь какой "взрыв мозга" кодировать в такой парадигме?

Для отчетных систем / сборка отчетов - возможно и осмысленно. А для универсального языка программирования - это какой-то освенцем и дурдом для программистов ))) Такое частилище, что потом 9-кругов ада пионерским лагерем покажутся )))

IMHO
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706986
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТебе по идее вообще не нужна строка. У тебя сервлет. И у него где то есть OutputStream. Вот туда и надо нацелить html bulder.вот тут и проявляется. у меня ws. и тут только строка или бинари.
и строка, как ни крути, останется строкой.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706996
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev2. Можно смотреть статистику потребления памяти на уровне Thread/группа Thread/application

Статистика это +1000

Меня всегда интересовал сбор информации о частоте дёргания new в исходниках и о времени
жизни порождаемых объектов. Думалось так:

Здесь делаем хинт аллокатору что объект сразу будет вечным.
Код: java
1.
    static Pool pool = @Metaspace new MyFuckenLongTermPool(.....);
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39706997
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevmayton...о парадигме (близкой к ФП) языка где строк не существует но есть такие себе pure-functions
которые генерируют потоки символов...

Ты представляешь какой "взрыв мозга" кодировать в такой парадигме?

Для отчетных систем / сборка отчетов - возможно и осмысленно. А для универсального языка программирования - это какой-то освенцем и дурдом для программистов ))) Такое частилище, что потом 9-кругов ада пионерским лагерем покажутся )))

IMHO
Давай подумаем. Из API стримов выпадает только взятие симаола по индексу.
Или substr(m,n). Все остальное работает.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39707001
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev1. Нужно как-то уметь понимать и обрабатывать объекты покидающие/могут покинуть (аналог escape-анализа) Thread.

Я-бы добавил профайлер survival областей. Мне кажется там лежат самые подозрительные объекты.
Это еще не старички. Но уже и не Эдемский сад. Вобщем их идентифицировать и понять где в коде
они были созданы. Возможно будет много точек в коде где есть конструктора и фабрики. И такие
точки надо подсвечивать красным примерно как это делает SonarQube. Отчот по memory-performance
включает в себя этих перебежчиков.
...
Рейтинг: 0 / 0
Что не так с Java String и как вы с этим боретесь?
    #39707014
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
а зачем столько головняков? почему не остановиться на StringBuilder?
ведь там есть всё, что нужно для работы со строками .
только останется выяснить как ведёт себя .delete
Код: plaintext
1.
2.
Removes the characters in a substring of this sequence. The substring begins at the specified start and extends
to the character at index end - 1 or to the end of the sequence if no such character exists. If start is equal to end, no
changes are made.

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


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