Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Оптимизации потребляемой памяти #2540

Conversation

qtLex
Copy link
Contributor

@qtLex qtLex commented Jan 8, 2022

Описание

Оптимизации потребляемой памяти

  • Коллекция occurrences не использовалась. Удалил
  • Уменьшение потребляемой памяти за счет применения intern() у строк

@nixel2007
Copy link
Member

намерил что-нибудь в цифрах?

@qtLex qtLex force-pushed the feature/reduce-memory-consume-symbol-tree branch from b36a0af to 7647ad0 Compare January 9, 2022 09:43
@qtLex
Copy link
Contributor Author

qtLex commented Jan 9, 2022

Выигрыш сейчас около 200 мБ. Дамп снимал на момент начала анализа файлов.

Было в ветке feature/reduce-memory-consume
image

После дропа occurrences и расстановки intern()
image

Сильно удалось уменьшить дублирование строк. Основная часть была в описании параметров и возвращаемых значений. Остаток в основном в mdclases.

image

image

ЗЫ. Тесты на ssl 3.1

@qtLex qtLex force-pushed the feature/reduce-memory-consume-symbol-tree branch from 7647ad0 to 6ef18c5 Compare January 9, 2022 10:32
@qtLex
Copy link
Contributor Author

qtLex commented Jan 9, 2022

Еще попробую выполнить, предложенную тобой, замену ConcurrentHashMap на ConcurrentSkipListMap.

@nixel2007
Copy link
Member

Смотри на вкладке object sizes. Там можно посмотреть, сколько занимает конкретно мапа, а не вся память

@qtLex
Copy link
Contributor Author

qtLex commented Jan 9, 2022

Я там тоже смотрел

@qtLex
Copy link
Contributor Author

qtLex commented Jan 24, 2022

@nixel2007

private final Map<Symbol, Set<SymbolOccurrence>> occurrencesToSymbols = new ConcurrentSkipListMap<>();

Если использовать ConcurrentSkipListMap вместо ConcurrentHashMap выигрыш получился приблизительно в 0,5мБ
image

image

Ты писал о выигрыше в 200мБ. Я правильно понимаю, что необходимо еще поменять использование ConcurrentHashMap.newKeySet() для хранения Set<SymbolOccurrence>, Реализовав схожую коллекцию, но с ConcurrentSkipListMap в основе?

Как я понял из обсуждения в телеграмме сейчас экспериментируешь с кастомной реализацией intern. Есть ли смысл в этом pr пока не закончены эти эсперементы?

@nixel2007
Copy link
Member

@qtLex я пушнул c4dc4b7 в отдельный бранч, посмотри, плз.

Есть ли смысл в этом pr пока не закончены эти эсперементы?

да, есть, я просто потом все String#intern заменю на вызов StringInterner#intern

@nixel2007
Copy link
Member

Производительность после замены мапы не упала?

@qtLex
Copy link
Contributor Author

qtLex commented Feb 10, 2022

Подчистил от лишних вызовов intern. На памяти не сказалось.

Производительность после замены мапы не упала?

Перенес изменения из c4dc4b7. По памяти выигрыш есть. Померил немного без жесткого ограничения по памяти. Просадки не увидел. Гонял УХ

До
ДоИзменений

После
ПослеИзменений

По пробовал с меньшим количеством памяти. Время анализа увеличивается пропорционально для обоих вариантов.

@qtLex qtLex marked this pull request as ready for review February 10, 2022 15:40
@qtLex qtLex requested a review from nixel2007 February 10, 2022 15:49
@nixel2007
Copy link
Member

спасибо огромное!

@nixel2007 nixel2007 merged commit 0e4792a into 1c-syntax:feature/reduce-memory-consume Feb 10, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants