Я работаю на веб-приложения Java, которая использует один большой каскад HashMaps который выглядит следующим образом:HashMap эффективность памяти
HashMap<String, HashMap<String, HashMap<String, Double[]>>>
Конструкцию после создания, а затем используется только для чтения.
Двойной массив всегда имеет ровно два элемента. Проблема в том, что в конце я использую более 160 байт на двойной массив. Это в 10 раз больше двух двухместных (каждый 8 байт).
Я использовал Runtime.getRuntime().totalMemory()
, чтобы посмотреть на использование памяти один раз перед созданием карты и один раз после этих измерений.
Как минимизировать накладные расходы на память?
Есть три возможных решения я считаю прямо сейчас:
Используйте другую структуру данных или реализацию Hashmap
Именно предвычислять размер каждой карты и установить начальную емкость этого (что?) число + 1 и коэффициент нагрузки до 1,0.
Свернуть все ключи в одну строку, добавив их. Это не очень практично для меня, но абсолютно выполнимо. Однако код выглядел бы неплохо.
Мой вопрос теперь, что это лучший способ, чтобы минимизировать накладные расходы памяти в HashMap в моем случае, когда я создаю HashMaps один раз, а затем использовать их только для чтения только?
Как выглядят ваши строки и сколько элементов имеет каждый из них в среднем по HashMap? Могут быть некоторые оптимизации, которые вы можете сделать на их основе. – Vitruvius
Можно ли уменьшить это до одного HashMap, получив составной ключ? Возможно, что-то простое, как объединение трех ключевых строк, чтобы сделать один ключ, будет работать. –
@PaulHicks спрашивает упомянутый это возможность. – Vitruvius