Подтвердить что ты не робот

Что вызывает полную сборку мусора в Java?

Мне интересно, какие именно ситуации вызывают сборку Full Garbage Collection в Java.

Очевидными являются:

  • Запуск старого поколения
  • Запуск из perm gen
  • Calling System.gc()

Как насчет других случаев, вызывающих полный gc? В частности:

  • Не хватает свободного места в Survivor Space для копирования объектов из Eden.
  • Незначительные коллекции не могут справиться с темпом распределения новых объектов (не знаю, как это сделать).

Я запускаю Sun Java 1.6 и использую Concurrent Mark-Sweep и ParNew для нового поколения.

4b9b3361

Ответ 1

Я наблюдал еще одну ситуацию, которая запускает полный GC в Java Hotspot VM 1.6 64bit на Ubuntu, используя Concurrent Mark-Sweep:

Если значение -XX: значение PermSize не равно -XX: MaxPermSize (например, меньше), случайный полный GC происходит, когда java необходимо расширить PermGen (хотя ему не нужно выделять больше памяти, чем MaxPermSize). Поэтому настройка -XX: PermSize и -XX: MaxPermSize одинакова, кажется хорошей идеей.

Ответ 2

Это сильно зависит от ваших параметров jvm и jvm, которые вы используете.

По этой причине я рекомендую вам взглянуть на книгу "Производительность Java" bý John and Hunt.