Какие стратегии следует использовать для обеспечения быстрого управления памятью JVM? - PullRequest
0 голосов
/ 27 октября 2011

Какие стратегии следует использовать для обеспечения быстрого управления памятью JVM?

Я запускаю метод периодически, каждые 10 секунд, через Timer#scheduleAtFixedRate(), и периодический метод обычно занимает от 5 до 50 миллисекунд, но иногда намного дольше. Приложению больше нечего делать, кроме этого периодического метода. Иногда это превышает 10 секунд. Поскольку характер приложения не вызывает или не должен вызывать большую изменчивость за прошедшее время, я думаю, что эта изменчивость обусловлена ​​сборкой мусора. Как я могу всегда собирать мусор до 10 секунд?

Периодический метод строит списки и строит точки на графиках каждые 10 секунд в течение нескольких часов. По истечении нескольких часов он выполняет некоторые двоичные сериализации всех данных, которые были собраны за все время.

Я попытался завершить периодический метод с помощью System.gc(), но я все еще получаю запуск метода, который занимает более 10 секунд. После 10-секундного цикла он вернется к 5-миллисекундным циклам с истекшим временем. Тогда это будет постепенно занимать больше времени, пока не истечет около 10 секунд. Затем цикл повторяется. Я видел и другие паттерны.

Вас может удивить, что произойдет, если метод займет больше времени, чем период, установленный в scheduleAtFixedRate(). Что происходит, так это то, что следующий вызов откладывается (нет прерывания метода в процессе или попытки придерживаться расписания с использованием другого потока). Если медленные пробеги сохранятся, я думаю, что просто будет большое отставание. К счастью, длительные промежутки времени являются случайными, и большинство из них составляет от 5 до 50 миллисекунд. Тем не менее, я не хочу, чтобы эти длительные промежутки времени истекли, потому что они разрушают периодичность.

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

1 Ответ

0 голосов
/ 30 октября 2011

Чтобы сократить затраченное время за счет снижения эффективности, используйте опцию JVM -Xincgc в командной строке вызова Java.

...