Вопрос

Как копирующий сборщик мусора избегает фрагментации памяти? Кроме того, какие последствия для использования пространства кучи?

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

Если это правильное понимание, как это избегает фрагментации памяти?

Этот процесс должен использовать много пространства кучи, потому что в нем будут дублировать все элементы, которые он скопировал, верно?

Это было полезно?

Решение

Если это правильное понимание, как это избегает фрагментации памяти?

Потому что, когда вы копируете объекты в «новую кучу», вы добавляете их прямо рядом друг с другом, не оставляя никаких пробелов.

Этот процесс должен использовать много пространства кучи, потому что в нем будут дублировать все элементы, которые он скопировал, верно?

Только во время процесса сбора. После того, как вы это сделали, все «оригиналы» разделились, и это пространство снова освобождено.

Кроме того, такие коллекционеры мусора часто являются «поколением»-копирование коллекции мусора используется на недолговечных объектах, причем более долговечные объекты обрабатываются по-разному. Это помогает облегчить проблему пространства, а также для того, чтобы коллекции занимали меньше времени.

Другие советы

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

Фрагментация памяти возникает, когда куски памяти связаны между двумя активными кусками. Подумайте о блоке памяти, как так ...

AAAAAAAAAAAAAAAABBBBCCCCCCCCCCCC

Предположим, что B больше не нужен. Если мы освободим пространство, которое использовал B, у нас есть что -то вроде ...

AAAAAAAAAAAAAAAA----CCCCCCCCCCC

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

AAAAAAAAAAAAAAAACCCCCCCCCCC---- (more free space here)

Большинство современных коллекционеров могут перемещать вещи на месте. То есть вы можете увидеть, как C может быть «смещен», чтобы занять старое пространство B, и, следовательно, накладных расходов на память нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top