Насколько я понимаю, есть два фундаментальных подхода к сборе мусора:
Copying collectors
Mark-and-sweep
Оба алгоритма описываются в этой статье. По второму алгоритму автор статьи пишет:
Объекты аллоцируются в памяти
Нужно запустить GC
Приложение приостанавливается
Сборщик проходится по дереву объектов, помечая живые объекты
Сборщик проходится по всей памяти, находя все не отмеченные куски памяти, сохраняя их в "free list"
Когда новые объекты начинают аллоцироватся они аллоцируются в память доступную в "free list"
Если я правильно понимаю, то объекты, которые необходимо удалить, переносятся в "free list". Но где, собственно, происходит удаление этих объектов? Или они явно не удаляются, а просто перезаписываются при создании новых объектов?
Ответ
Насколько я понимаю, нет необходимости производить дополнительные операции по удалению объектов в памяти. JVM будет создавать новые объекты на месте старых.
Статья о том, как производится создание и удаление объектов в C++
The delete operator does not actually delete anything. It simply returns the memory being pointed to back to the operating system. The operating system is then free to reassign that memory to another application (or to this application again later).
Думаю в java аналогично, только там не операционная система, а jvm. (Не совсем уверен, буду рад, если кто поправит)
Комментариев нет:
Отправить комментарий