Skip to content
This repository has been archived by the owner on Dec 3, 2019. It is now read-only.

Никишин А.А. #2

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

Conversation

anickishin
Copy link

Процессор загружен примерно на 20%. Памяти занято примерно 25 МБ, скачет и постепенно растёт. Раз в три минуты происходит большая очистка.
Выполнение скрипта:

1 2 3 100 500 1000 2000 3000
текущий шаг0.7500.0620.0470.0310.0470.0630.1100.219
среднее 0.0480.0380.0400.0600.094
Больше всего времени занимает AccountDAOImpl.getAllAccounts(). Посмотрим память. В нём есть HashSet, для которого хеш всегда 1. Изменим функцию hashCode().
2. Процессор загружен примерно на 12%. Памяти занято примерно 20 МБ, скачет и постепенно растёт. Раз в три минуты происходит большая очистка. Выполнение скрипта:
1 2 3 100 500 1000 2000 3000
текущий шаг0.8320.0600.0600.0400.0300.0350.0450.050
среднее 0.0520.0400.0370.0380.041
Стал много заниматьjava.util.HashSet, но в Call Tree я обнаружил, что его вызывает getAllAccounts, которого вызывает getAccountByUser, что странно. В getAccountByUser 2 раза смотрим таблицу, один с обращением по конкретному, а второй через stream от getAllAccounts. Оптимизируем.
3. Процессор загружен примерно на 10%. Памяти занято примерно 25-50 МБ, скачет и постепенно растёт. Раз в три минуты происходит большая очистка. Выполнение скрипта:
1 2 3 100 500 1000 2000 3000
текущий шаг0.7810.0550.0520.0350.0350.0350.0450.050
среднее 0.0490.0380.0360.0370.039
Заметил getAllUsers(). В getAllUsers() обнаружил бесполезный fetched. Убираем.
4. Процессор загружен примерно на 10%. Памяти занято примерно 25-45 МБ, скачет и постепенно растёт. Раз в три минуты происходит большая очистка. Выполнение скрипта:
1 2 3 100 500 1000 2000 3000
текущий шаг0.7750.0550.0500.0350.0350.0300.0400.045
среднее 0.0500.0390.0360.0360.039
Заметил, что getAllUsers() входит в insertUser(). Меняем определение id на AUTO_INCREMENT.
5. Процессор загружен примерно на 10%. Памяти занято примерно 20-45 МБ, скачет и постепенно растёт. Раз в три минуты происходит большая очистка. Выполнение скрипта:
1 2 3 100 500 1000 2000 3000
текущий шаг0.8260.0550.0550.0400.0300.0350.0350.050
среднее 0.0510.0380.0360.0360.038
Заметил, что loadDriver() часто запускается. Оптимизируем.
6. Процессор загружен примерно на 9%. Памяти занято примерно 15-40 МБ, скачет и постепенно растёт. Раз в три минуты происходит большая очистка. Выполнение скрипта:
1 2 3 100 500 1000 2000 3000
текущий шаг0.7710.0550.0550.0350.0250.0350.0350.040
среднее 0.0510.0370.0340.0330.034

@anickishin
Copy link
Author

Используемая память при 3000 выполнений.

GC Потребляемая памятьСреднее время
-XX:+UseSerialGC 10-30 МБ 0.034
-XX:+UseParallelGC 15-100 МБ 0.035
-XX:+UseConcMarkSweepGC10-25 МБ 0.035
-XX:+UseG1GC 15-100 МБ 0.036
По потребляемой памяти я бы выбрал CMS. Остальные параметры примерно одинаковые.

@anickishin
Copy link
Author

Подменив H2 структурами ConcurrentHashMap производительность изменилась в лучшую сторону.
Процессор загружен примерно на 9%. Памяти занято примерно 50 МБ, скачет.

1 2 3 100 500 1000 2000 3000
текущий шаг0.8930.0600.0600.0300.0280.0270.0320.031
среднее 0.0480.0330.0310.0310.030
Для запуска с реализацией на основе структур необходимо запустить с параметром командной строки "-dao=hm", на основе базы данных "-dao=h2" или без параметров

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant