У меня есть проект Java, который инициализирует тысячи объектов в древовидной иерархии.Class-wise профилирование потребления памяти Java
Изначально я программировал с учетом производительности и, таким образом, не возражали хранения много вычисляемых свойств в полях класса (переменные) ..
Однако, в последнее время, я начал пытаться оценить объем памяти моего проекта и нашел, что он очень большой.
Я пытаюсь определить, какой класс потребляет наибольшее количество памяти
Я думаю, то я могу сужать его вниз, к которому поле потребляющего большинства (вероятно, струнный)
я наткнулся instrumentation
пакета Java и getObjectSize
Я попытался понять их документацию, но я не уверен, что instrumentation
подходит для моей задачи.
Я также заметил, что getObjectSize
не рекурсивно найти размеры.
Я думал о создании класса, который расширяет Object
и содержит статическую карту instance -> instanceSize
, а затем сделать все мои классы расширить этот класс, а также обновлять свои конструкторы
Является ли мой подход правильным?
Каким будет самый «Java» способ выполнить это?
Я начал использовать инструмент анализа памяти Eclipse (MAT), и он отлично справляется с работой! Спасибо за понимание –