2013-08-27 3 views
3

Как я прочитал в управлении белой бумаги ВС памяти:запрос относительно мусора поведения коллектора

When stop-the-world garbage collection is performed, execution of the application is completely 
suspended during the collection 

Так, если запрос происходит, когда сборщик мусора работает, то, как он обрабатывается приложением? Если сборщик мусора занимает слишком много времени, приложение выведет исключение? Я не сталкивался с такой проблемой, но хотел знать, возможно ли это, и какое исключение выбрасывается?

+0

Я не думаю, что будет какое-то исключение, которое будет выброшено. – codeMan

+0

, но если будет выполняться сетевая операция, то наверняка произойдет какой-то сетевой тайм-аут, если потребуется больше времени. так как это обрабатывается – DevZer0

ответ

0

Этот сборщик мусора больше не используется и заменяется лучшим сборщиком мусора.

stop-the-world сборщик мусора действительно остановил полное приложение (все потоки) и очистил кучу.

Когда сборщик мусора займет слишком много времени (что почти никогда не произойдет), будет выброшено Error.

Бесшумный трафик на сетевых сокетах буферизуется на время запуска коллектора.

+0

Исключение выбрано? Я знаю это! которое исключение должно быть @Uwe Plonus – codeMan

+0

Если какой-либо сборщик мусора не может выполнить свою задачу своевременно, будет выбрано 'OutOfMemoryError'. –

+0

@UwePlonus: если сборщик является коллекционером стоп-мира, не имеет значения, сколько времени потребуется, вы не получите OutOfMemoryError, так как программа была остановлена ​​и никакого распределения не происходит. Вы можете получить OutOfMemoryError, если сборка мусора закончит свой запуск, но не сможет вернуть свободное пространство. – davmac

1

Все (почти) сборщики мусора Java имеют своего рода фазу Stop-the-world, где все потоки Java приостановлены, ожидая завершения эксклюзивных системных операций. Это состояние иногда называют safepoint.

Современные сборщики мусора одновременно работают вместе с потоками приложений, что означает, что сборщик мусора выполняет свою работу одновременно с приложением. Во время процесса сбора мусора есть фазы, в которых требуется эксклюзивная доступная память, прикладные потоки входят в это состояние safepoint.

Исключение выдается, если сборщик мусора не может восстановить достаточное количество памяти для удовлетворения требований распределения приложения.

Одна из альтернатив избавиться от коллекций мусора с прекрасным миром - это перейти на Zing JVM с сборщиком C4 от систем Azul. Реализация имеет низкий подход к паузе без каких-либо стоп-мировых коллекций. Вместо этого он использует параллельный метод уплотнения без фаз остановки.

+0

Как долго может проходить нить между безопасными точками? Если поток X находится между безопасными точками и сборкой мусора, потребуются ли все остальные потоки до тех пор, пока X не достигнет следующего safepoint, вне зависимости от того, как долго будет собираться коллекция? – supercat