У нас есть некоторый устаревший код, который был написан в начале 2000-х годов и который до сих пор работал нормально, за исключением случаев, когда мы добавляли в систему больше пользователей, для которых ежедневно возникали исключения OutOfMemory
Мы собираемся повторить проект изс нуля, но мы хотим лучше всего использовать существующую базу кода.
В коде тысячи (да не лучший дизайн) HashMaps, которые изменяются только в цикле при создании и после этого остаются только для чтения.
Когда я запускаю анализатор памяти, он говорит, что есть15% кучи состоит из неиспользуемого пространства в HahsMaps.
Для этих случаев, если мы используем отражение, чтобы сделать набор записей доступным и изменим его размер таким образом, чтобы размер соответствовал фактическому необходимому, произойдет ли сбой итераторов?
После первоначального построения эти карты доступны только для чтения.Мы выполняем код на Java 6 и несколько экземпляров на Java 8. Не будем обновлять версию JVM, через 10-12 месяцев новый код будет в работе и заменит текущую.
Я знаю, что мы можемдать лучший начальный размер при создании хэш-карты, но это большая работа по сравнению с одной функцией, которая изменяет размер карты на основе текущего размера.Также большинство карт являются частью библиотек (что у меня нет доступа к исходному коду), и они не предоставляют конструктор, который принимает размер.они вызывают конструктор по умолчанию только для своего внутреннего HashMap.