2014-11-26 6 views
7

В течение жизненного цикла Java HashMap существует способ определить, сколько произошло столкновений/цепочек. Сколько раз изменение размера HashMap и сколько времени прошло каждое изменение размера?Статистика для java HashMap

Я проверил исходный код для HashMap (1.6), и похоже, что он может быть расширен, чтобы добавить к нему вышеуказанные функции.

Немного фона, я унаследовал какое-то унаследованное приложение, и поскольку мы используем CMS-GC, который оказывается не уплотняющим. Эти хеш-таблицы могут иметь более миллиона записей. Мы сталкиваемся с некоторыми проблемами производительности в производстве, которые возникают только во время всплесков активности. И мы не смогли воспроизвести их в нашей производственной копии.

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

Также был бы признателен за ваше мнение/критику в том, что это правильная линия мышления?

+3

'Я проверил исходный код для HashMap (1.6), и похоже, что он может быть расширен, чтобы добавить к нему вышеуказанные функции.« Что вы видели, что заставило вас подумать об этом и какой подход вы имели в виду? Кроме того, почему вы теперь подозреваете, что этот подход не работает, так что вы спрашиваете здесь? –

+0

Я искал либо критику (плохую идею), либо мнение (см. Эту библиотеку с открытым исходным кодом). Поиск Google не дал никаких результатов, поэтому я был удивлен. Обычно на большинство вопросов отвечают результаты Google. Вот интересная [ссылка] (http://www.javamex.com/tutorials/collections/hash_codes_advanced_statistics.shtml), которую я нашел, не уверен в математике за ней. Я опубликую последующее описание этого упражнения. – yichuan

+0

В Java 8 есть некоторые полезные обновления для HashMap для производительности. Если вам посчастливилось использовать Java 8, вы должны попробовать его –

ответ

1

Вы идете по правому пути. Вы можете расширить Hashmap и переопределить методы, используя подсчеты. Исходя из условий, вы можете увеличить количество очков.

Обновление: Вы можете попробовать использовать API-интерфейс ManagementFactory Java, который даст вам больше информации о hashmap.

+0

Спасибо Abhijeet! – yichuan

0

Если бы я был вами, я бы использовал инструмент профилирования, такой как Dynatrace, чтобы понять во время выполнения непосредственно на вашей производственной среде, что происходит. Это то, что мы используем в моей компании.

В качестве альтернативы, если у вас нет лицензии Dynatrace (и вы не хотите делать POC, чтобы попробовать ее), я попытался бы использовать Java Instrumentation API или аспекты (с aspectj), чтобы сделать некоторое профилирование. Это лучшее решение, чем расширение HashMap, поскольку вы продолжаете использовать реальные классы, которыми пользуется ваше текущее приложение, и, следовательно, не имеют никаких побочных эффектов.

Другой вариант OTS - использовать такой инструмент, как Collection Spy (но, честно говоря, я его никогда не использовал).

Я также нашел эту интересную статью о profiling java applications with opensource tools.

+0

Java Instrumentation API выглядит интересно, мы обязательно попробуем это в следующей версии. Также предоставит Collection Spy вращение в среде, отличной от prod, - это двухнедельный пробный период. – yichuan

Смежные вопросы