Я сравниваю Trie с HashMap, хранящим английские слова, более 1 миллиона. После загрузки данных выполняется только поиск. Я пишу код для проверки скорости и памяти. Скорость кажется легкой для измерения, просто записывая системное время до и после кода тестирования.
Каков способ измерения использования памяти в памяти? В этом случае это либо Trie, либо HashMap. Я наблюдал за монитором производительности системы и тестировался в Eclipse. Монитор производительности ОС показывает, что память более 1 ГБ используется после запуска моей тестовой программы. Я сомневаюсь в том, что для хранения данных требуется так много памяти.
Кроме того, на моей машине с Windows это показывает, что использование памяти продолжает расти в течение всего времени тестирования. Это не должно происходить, поскольку начальное время загрузки данных невелико. И после этого во время фразы поиска не должно быть больше дополнительного потребления памяти, поскольку новые объекты не создаются. В linux использование памяти кажется более стабильным, хотя оно также увеличило некоторые.
Не могли бы вы поделиться некоторыми мыслями по этому поводу? Большое спасибо.
Короткий ответ: вы не можете. Длительный ответ: вы можете рассчитать размер объектов в памяти, повторив анализ дифференциальной памяти, вызывающий GC несколько раз до и после тестов. Но даже тогда только очень большие числа или круг могут аппроксимировать реальный размер. Сначала вам нужна фаза прогрева, и даже если все швы будут работать ровно, вы можете застрять в jit и других оптимизациях, о которых вы не знали.
В общем, это хорошее правило для подсчета количества объектов, которые вы используете.
Если ваша реализация дерева использует объекты как структуру, представляющую данные, вполне возможно, что потребление вашей памяти велико по сравнению с картой.
Если у вас есть количество данных, карта может стать медленной из-за столкновений.
Общий подход заключается в оптимизации в случае необходимости оптимизации.
Вы попробовали инструмент "jps", предоставляемый Oracle в Java SDK? Вы можете найти это в папке JavaSDK/bin. Это отличный инструмент для проверки производительности и даже использования памяти.