Что запускает полную сборку мусора в Java? - PullRequest
21 голосов
/ 03 марта 2012

Мне интересно, какие именно ситуации запускают полную сборку мусора в Java.

Очевидные из них:

  • Исчерпание старого поколения
  • Исчезает perm gen
  • Вызов System.gc ()

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

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

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

Ответы [ 2 ]

4 голосов
/ 25 апреля 2012

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

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

2 голосов
/ 03 марта 2012

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

По этой причине я рекомендую вам взглянуть на книгу "Производительность Java", Джон и Хант.

...