2010-09-20 4 views
1

Этот вопрос является продолжением моей предыдущей Java GC вопрос: Java Garbage Collector clarificationJava GC Stop и скопировать

Этот вопрос также относится к тому же статье.

Я немного запутался в том, почему так часто используется метод дефрагментации кучи объектов stop and copy. Да, он дефрагментирует кучу, однако кажется, что есть тонны накладных расходов, потому что в основном вы сокращаете общее количество кучи пополам. Также вам нужно скопировать ВСЕ живые объекты, когда одна половина закончилась.

Помимо дефрагментации существует ли какая-либо другая фундаментальная причина, по которой «остановить и скопировать» лучше, чем сказать «отметка и развертка»?

+3

Вы понимаете, что статья с 1996 года, и мир с тех пор много переехал, верно? Взгляните на документы Sun Hotspot, в частности на «сборку мусора», чтобы узнать, где сейчас происходит (у меня нет ссылки, но Google делает это). – Anon

+0

Дефрагментация не обязательно сокращает общее количество кучи пополам. Некоторые реализации могут это сделать. Также он не обязательно копирует * все * живые объекты. –

+0

Хорошо, поэтому я просто искал «сборщик мусора», но я действительно не понимаю механизм? Может кто-нибудь дать быстрое объяснение? – Albinoswordfish

ответ

4

Фактически, фрагментация - фундаментальная, а способность некоторых ГК побеждать - это значительный актив.

Стоп-и-копия алгоритм имел обыкновение быть популярной в реализации GC, потому что:

  1. он прост в реализации;
  2. он автоматически дефрагментирует память;
  3. его рабочее время пропорционально количеству живым объектами, что делает его асимптотически очень эффективным.

Более современный GC, в том числе тех, которые используются в Java, использует гораздо более сложные стратегии, потому что они хотят сделать короткие паузы (вместо того, чтобы общее время GC низким, они предпочитают не останавливаться применением в течение длительного времени , потому что паузы вредны для интерактивности), более чистое взаимодействие с кэшами и виртуальной памятью и использование систем с несколькими процессорами.

Jones and Lins book является обязательным для чтения для тех, кто хочет понять сбор мусора.

1

Отличный учебник по сборщику мусора - Tuning Garbage Collection (к сожалению, новый сайт оракула очень много испортил его форматирование).

Ваш вопрос обрабатывается в главе V. Это в основном объясняет, какие типы стратегий вы можете использовать в сборщике мусора Java и которые по умолчанию. Большинство настольных приложений будут заинтересованы в том, чтобы остановить как можно меньше, потому что это то, что пользователь может заметить.

Обратите внимание, что ваш вопрос не касается дефрагментации. Оба будут в конечном итоге сжать пространство памяти.

Смежные вопросы