Есть ли какие-либо планы по предоставлению внутренних массивов в java.lang.String?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли какие-либо планы по предоставлению внутренних массивов в java.lang.String?

Сообщение Anonymous »

При попытке настроить производительность нашего конвейера синтаксического анализа/проверки/привязки XML я часто упирался в стену, потому что java.lang.String не раскрывает значение своего внутреннего резервного массива byte[] / byte coder и не предлагает никаких конструкторов с нулевым копированием из char[]/

Код: Выделить всё

byte[]. Прямой доступ к резервному массиву значительно ускорит некоторые операции по сравнению с charAt()
(проверка диапазона O(n)) или getChars()/

Код: Выделить всё

getBytes()
(только 1 проверка диапазона, но операция копирования). Например, в одном из моих тестов просмотр всех байтов в различных XML-строках размером 100 МБ в ОЗУ был в 3 раза быстрее, если не использовать charAt().
Но наивный доступ к резервному массиву через VarHandles/LambdaMetafactory не будет работать из-за IllegalAccessException: модуль не открывается.... Я собирался подумать: «Ну, может быть, это просто невозможно в Java или мой вариант использования глуп», когда наткнулся на статью ребят из FastJSON, в которой объясняется, как добиться именно того, что я хотел: прямого доступа к резервному массиву и создания нулевого копирования со значительным увеличением производительности для моих вариантов использования. Но, глядя на JDKUtils, это достигается за счет дикой смеси небезопасных, устаревших и недокументированных API (AFAIU).
Так действительно ли именно так следует писать оптимизированный по производительности код обработки строк на Java? Или есть ли какие-либо планы как-то «официально» сделать возможными дескрипторы VarHandles/конструктора? Небезопасность все больше и больше устаревает, не так ли? Я полностью понимаю, что такой доступ не должен быть слишком простым, поскольку он нарушает то, как «обычные пользователи» должны разрабатывать Java, но у меня такое ощущение, что по крайней мере синтаксическим анализаторам JSON/XML и платформам связывания такой доступ понадобится, чтобы иметь возможность конкурировать с C/C++, Rust и т. п.?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ang-string
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»