Java Сборка мусора после того, как память кучи пересекает порог - PullRequest
0 голосов
/ 09 апреля 2020

Можно ли вызвать принудительную сборку мусора в java каждый раз, когда память кучи пересекает определенный порог?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Это уже происходит. Например, в G1GC это либо когда заполнено пространство младшего размера (для небольшой коллекции), либо когда нажата кнопка InitiatingHeapOccupancyPercent (для основной коллекции). Оба они управляются с помощью флагов, так что вы можете сказать, когда точно - это G C, который должен быть запущен, если вы действительно этого хотите.

В Shenandoah есть ShenandoahGCHeuristics, который выберет некоторые эвристики (они также зависят от размера).

Если, с другой стороны, вы хотите сделать это программно (есть инструменты, которые уже делают это), вы можете написать некоторый код, который будет проверять размер кучи (например, через ManagementFactory::getMemoryPoolMXBeans), а затем через вызов агента . В общем, вам понадобится очень веская причина для этого.

0 голосов
/ 09 апреля 2020

Теоретически да, вы можете настроить такое поведение. Точные детали зависят от используемого алгоритма сбора мусора. Например, для CMS вы можете запустить G C, когда использование кучи памяти достигнет 70%. Скорее всего, вы также захотите установить начальный и максимальный пределы памяти.

-XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70

Надеюсь, это поможет!

...