Как измерить использование памяти структурой данных?

1

Я сравниваю Trie с HashMap, хранящим английские слова, более 1 миллиона. После загрузки данных выполняется только поиск. Я пишу код для проверки скорости и памяти. Скорость кажется легкой для измерения, просто записывая системное время до и после кода тестирования.

Каков способ измерения использования памяти в памяти? В этом случае это либо Trie, либо HashMap. Я наблюдал за монитором производительности системы и тестировался в Eclipse. Монитор производительности ОС показывает, что память более 1 ГБ используется после запуска моей тестовой программы. Я сомневаюсь в том, что для хранения данных требуется так много памяти.

Кроме того, на моей машине с Windows это показывает, что использование памяти продолжает расти в течение всего времени тестирования. Это не должно происходить, поскольку начальное время загрузки данных невелико. И после этого во время фразы поиска не должно быть больше дополнительного потребления памяти, поскольку новые объекты не создаются. В linux использование памяти кажется более стабильным, хотя оно также увеличило некоторые.

Не могли бы вы поделиться некоторыми мыслями по этому поводу? Большое спасибо.

  • 0
    Вы пытаетесь измерить размер вашей структуры данных в памяти ?
  • 0
    возможный дубликат вычисления размера объекта в Java
Показать ещё 1 комментарий
Теги:
trie

2 ответа

1

Короткий ответ: вы не можете. Длительный ответ: вы можете рассчитать размер объектов в памяти, повторив анализ дифференциальной памяти, вызывающий GC несколько раз до и после тестов. Но даже тогда только очень большие числа или круг могут аппроксимировать реальный размер. Сначала вам нужна фаза прогрева, и даже если все швы будут работать ровно, вы можете застрять в jit и других оптимизациях, о которых вы не знали.

В общем, это хорошее правило для подсчета количества объектов, которые вы используете.

Если ваша реализация дерева использует объекты как структуру, представляющую данные, вполне возможно, что потребление вашей памяти велико по сравнению с картой.

Если у вас есть количество данных, карта может стать медленной из-за столкновений.

Общий подход заключается в оптимизации в случае необходимости оптимизации.

0

Вы попробовали инструмент "jps", предоставляемый Oracle в Java SDK? Вы можете найти это в папке JavaSDK/bin. Это отличный инструмент для проверки производительности и даже использования памяти.

  • 0
    упс ... немного ошибаюсь. Это не "jps", это "jvisualvm".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню