Страницы

Поиск по вопросам

четверг, 15 ноября 2018 г.

Возможно ли реализовать тип данных более компактный и оптимальный чем String в Java?

Тип данных String (т.е. public final class String) в Java 1.8 занимает 3168 строк исходного кода (включая все deprecated-методы). Зачастую, никто не использует все возможности данного типа в конкретном проекте.
Ради спортивного интереса, хочется реализовать компактный тип данных а-ля public final class CompactFastString с минимальным набором методов и свойств.
Цель - более компактный с точки зрения используемой памяти и более быстрый для работы. Цель больше лабораторная, нежели реальная.
Но существует мнение, что сложно реализовать более оптимальное решение, чем стандартная Java SE библиотека.
Что вы думаете на этот счет?


Ответ

Более быстрый в общем случае не получится. Стандартные типы пакета java.lang очень оптимизированы на уровне JVM. Тот исходный код, который вы видите в этих классах - для информации и дебага, а в реальности он заменяется на исключительно быстрые инструкции с учетом возможностей процессора. Например, сравнение строк будет не посимвольным, а с помощью пакетных инструкций SSE, которые умеют сравнивать по 4 байта за такт процессора. В этом и есть преимущество JIT компиляции.
P.S. Архитекторы виртуальной машины тоже не очень довольны занимаемой памятью под строки, поэтому планируется в будущих версиях сделать 2 режима работы строк - utf-16 и только latin-1. Но опять же это будет на уровне JVM.

Комментариев нет:

Отправить комментарий