Skip to content

Generic

zuevmaxim edited this page Aug 4, 2020 · 2 revisions

В реализации специализации коллекций вся экономия памяти заключается в том, что данные лежат в массивах примитивных типов.

Идея: выделим хранение и работу с примитивным типом данных в отдельный интерфейс Storage<T>, а реализацию контейнера можно сделать generic. Можно добиться того чтобы все промежуточные операции проводились только с примитивными типами.

Плюсы:

  • не нужна runtime кодогенерация
  • ключи и значения на самом деле независимы => выделив Storage в отдельную сущность можно иметь линейное от количества примитивных типов число классов
    • в отличие от специализаций для HashMap, где требуется квадратичное количество
  • производительность решения несильно ухудшается

Минусы:

  • foreach - дорогая операция: требуется boxing примитивов
  • из-за generic-ов входной параметр является Object => 1 лишний boxing
  • виртуальные вызовы к Storage
  • создание возможно только через специальную inline reified функцию
    • требуется отдельная обработка для создания generic instance
    • специальная обработка для вызовов из Java

TODO: здесь должен быть график

Clone this wiki locally