Java gc - что такое долгоживущий объект? - PullRequest
0 голосов
/ 11 июня 2018

Мне сказали не создавать слишком много долгоживущих объектов, чтобы получить лучшую производительность gc.Потому что долгоживущие объекты будут перенесены в старое поколение.И собирать предметы в старом поколении дороже.

Но что значит долгоживущий?100 миллисекунд это слишком долго?А что насчет 10 секунд?

Мое приложение занимает кучу памяти 15 ГБ и использует G1 GC, я не могу найти какую-то конфигурацию, например, «как долго перемещать объект в старое поколение»

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Долгоживущие объекты - это объекты, которые выживают в достаточно малых коллекциях и «перемещаются» в старое поколение.

В первом ГХ живые объекты перемещаются в пространство выживших из нового поколения.Затем, после нескольких gcs, они сохраняются в старом пространстве.

Как показано здесь, уцелевший документ , количество объектов gc, оставшихся до пребывания, зависит от размера пространства уцелевшего.

В каждом GC JVM определяет количество раз, которое объект может быть скопирован до его владения, и называется порогом владения.Этот порог выбирается таким образом, чтобы пространство для выживших наполовину было заполнено.

Если вы хотите иметь больше контроля, вы можете использовать параметр JVM XX:MaxTenuringThreshold

0 голосов
/ 11 июня 2018

Порог владения - это количество раз, которое объект может пережить коллекцию молодого поколения, прежде чем перейти в старое поколение.Это можно настроить с помощью этих параметров :

  • -XX: InitialTenuringThreshold: Начальный порог владения (по умолчанию 7).
  • -XX: MaxTenuringThreshold: Максимальный порог владения (по умолчанию 15 для параллельного коллектора и 4 для CMS).
  • -XX: + PrintTenuringDistribution: Печать информации о возрасте владения.
...