Если вы используете много памяти и сталкиваетесь с утечками памяти, вы можете проверить, используете ли вы большое количество ArrayList
с или HashMap
с большим количеством элементов каждый.
ArrayList
реализован как динамический массив . Исходный код Sun / Oracle показывает, что когда новый элемент вставляется в полный ArrayList
, создается новый массив, в 1,5 раза превышающий размер исходного массива, и элементы копируются. Это означает, что вы можете тратить до 50% пространства в каждом используемом вами ArrayList
, если только вы не вызываете его метод trimToSize
. Или, что еще лучше, если вы знаете количество элементов, которые вы собираетесь вставить заранее, тогда вызовите конструктор с начальной емкостью в качестве аргумента.
Я не очень тщательно изучил исходный код для HashMap
, но на первый взгляд кажется, что длина массива в каждом HashMap
должна быть степенью двойки, что делает его еще одной реализацией динамического массива. Обратите внимание, что HashSet
по сути является оберткой вокруг HashMap
.