Удовлетворяет ли Java G1 сборщик мусора параметру MaxHeapFreeRatio? - PullRequest
2 голосов
/ 11 марта 2020

Относится ли сборщик мусора Java G1 (как реализовано в Open JDK) к параметру -XX:MaxHeapFreeRatio=n JVM?

Относится ли он к Java 8?

, который я нашел JEP 346: незамедлительно вернуть неиспользованную зарезервированную память из G1 , доставленной в Java 12, но мне не ясно, каково было состояние до него.

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Я не знаю более авторитетного ответа, чем исходный код, и да, вы правы в своем ответе - освобождение памяти произойдет только после полного G C (по крайней мере, до это JEP).

Для java -8:

Этот аргумент имеет значение, посмотрите здесь, например, .

Этот код не очень сложен для понимания, и здесь - это фактическое сокращение, которое происходит.

Чтобы получить более подробный ответ (относительно java -11, но все еще соответствует java -8), прочитайте this .

Итог это то, что флаг имеет значение , но как именно зависит от реализации. На ваш вопрос нет простого ответа.

0 голосов
/ 11 марта 2020

Неавторизованный ответ, который я нашел, основан на https://bugs.openjdk.java.net/browse/JDK-8078039?focusedCommentId=13632717&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment -13632717

В частности, некоторые GC поддерживают его, а некоторые нет. В этом RFE не указано, какой G C используется, поэтому я предполагаю, что речь идет о GC по умолчанию, который поддерживает MaxHeapFreeRatio. G1 также поддерживает эту опцию.

Для сокращения кучи (и освобождения памяти) требуется полный G C. Если приложение не запускает полный G C вручную, может пройти некоторое время, прежде чем оно будет запущено JVM.

Таким образом, ответ будет (для Java 8): да ... но нет.

  • да, он поддерживает опцию
  • , но только когда происходит полный G C, который может никогда не быть

(Мне по-прежнему любопытно, есть ли более авторитетный источник и каково текущее состояние в более современных JVM)

...