2012-05-08 2 views
4

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

Возможно ли это?

Возможно, если объект достаточно велик для хранения в нуле или первом поколении?

+0

AFAIK реализация поколения не гарантируется! Может быть более трех поколений, а способ продвижения объектов - это только деталь реализации. старые телефоны Windows Mobile имели 1 поколение! – CodingBarfield

ответ

7

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

(ссылка Fundamentals of Garbage Collection)

Так что да, большие объекты автоматически переходит в поколение 2.

Когда объект считается большой?

В Microsoft® .NET Framework 1.1 и 2.0, если объект больше или равен 85 000 байт, он считается большим объектом. Это число было определено в результате настройки производительности. Когда запрос на размещение объектов приходит и соответствует порогу этого размера, он будет выделен на кучу большого объекта. Что это значит? Чтобы понять это, может быть полезно объяснить некоторые основы в сборщике мусора .NET.

(Ссылка: CLR Inside Out: Large Object Heap Uncovered)

+0

Да, я должен чаще посещать MSDN :) спасибо! – ieaglle

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