ArrayList работает так, что он просто содержит массив определенного размера (который может быть указан в конструкторе, я полагаю, 10 по умолчанию?). Всякий раз, когда количество элементов становится слишком большим для внутреннего массива, размер внутреннего массива удваивается. Поэтому вам нужно умножить размер объекта на размер внутреннего массива.

я естьArrayList<Obj> и я хочу знать, сколько памяти он использует.

Obj Это вариант, так что это не так просто, как умножить количество элементов в массиве на размер объекта.

 robert_x4419 янв. 2011 г., 20:54

Ответы на вопрос(8)

что он просто содержит массив определенного размера (который может быть указан в конструкторе, я полагаю, 10 по умолчанию?). Всякий раз, когда количество элементов становится слишком большим для внутреннего массива, размер внутреннего массива удваивается. Поэтому вам нужно умножить размер объекта на размер внутреннего массива.

если знаете распределение содержимого объектов.

Однако самый точный метод, который я могу придумать, - это посмотреть на него в профилировщике. Есть бесплатные инструменты, некоторые из которых поставляются с JDK. Тем не менее, лучший инструмент, который я использовал, это Yourkit. Это не значит, что это единственное решение, просто мое любимое.

 bestsss19 янв. 2011 г., 20:54
Jmap достаточно хорошо и бесплатно :)

ьный метод определения использования памяти экземпляра, который я знаю, это использовать Java 5измерительные приборы агент. Есть немногоруководство сделать это.

(4 bytes on 32bit, 8bytes on 64bit) + [Object header + one int and one references].

Емкость отличается(always >=) чем размер, но вы хотите сделать их равными, позвонитеtrimToSize()

Технически говоря,ArrayList имеетObject[] где он хранит данные.

профайлер например, доступный в Netbeans, который покажет вам потребление памяти нашей программой и может дать вам некоторые сведения о каждом объекте.

Решение Вопроса

Runtime.getRuntime().totalMemory() и его коллегаRuntime.getRuntime().freeMemory() чтобы получить обоснованное предположение, но это не учитывает объекты, которые GC'ed между вызовами.

 magallanes19 янв. 2011 г., 21:16
Благодарю. Хорошо, это не на 100% точно, но его легко реализовать.

это зависит от того, как вы измеряете. Если бы вы спросили меня о размере ArrayList, я бы дал вам небольшой размер. То есть ArrayList состоит из массива ссылок и целого числа, указывающего количество содержащихся элементов. Если вы хотите узнать размер, это просто 4 + * array.length.

Если вы хотите узнать размер ArrayList и всех содержащихся в нем элементов, то есть несколько анализаторов кучи, которые могут это выяснить. Я считаю, YourKit является одним из них.

платформы. Минимальный размер для пустого ArrayList составляет 64 байта. Весьма вероятно, что вам не нужно это знать, если у вас нет 100К элементов или более.

Ваш ответ на вопрос