Код: Выделить всё
byte[]. Прямой доступ к резервному массиву значительно ускорит некоторые операции по сравнению с charAt()Код: Выделить всё
getBytes()Но наивный доступ к резервному массиву через VarHandles/LambdaMetafactory не будет работать из-за IllegalAccessException: модуль не открывается.... Я собирался подумать: «Ну, может быть, это просто невозможно в Java или мой вариант использования глуп», когда наткнулся на статью ребят из FastJSON, в которой объясняется, как добиться именно того, что я хотел: прямого доступа к резервному массиву и создания нулевого копирования со значительным увеличением производительности для моих вариантов использования. Но, глядя на JDKUtils, это достигается за счет дикой смеси небезопасных, устаревших и недокументированных API (AFAIU).
Так действительно ли именно так следует писать оптимизированный по производительности код обработки строк на Java? Или есть ли какие-либо планы как-то «официально» сделать возможными дескрипторы VarHandles/конструктора? Небезопасность все больше и больше устаревает, не так ли? Я полностью понимаю, что такой доступ не должен быть слишком простым, поскольку он нарушает то, как «обычные пользователи» должны разрабатывать Java, но у меня такое ощущение, что по крайней мере синтаксическим анализаторам JSON/XML и платформам связывания такой доступ понадобится, чтобы иметь возможность конкурировать с C/C++, Rust и т. п.?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ang-string
Мобильная версия