При просмотре кода PinnableObjectCache
от mscorlib
я столкнулся с следующим кодом:
for (int i = 0; i < m_restockSize; i++)
{
// Make a new buffer.
object newBuffer = m_factory();
// Create space between the objects. We do this because otherwise it forms
// a single plug (group of objects) and the GC pins the entire plug making
// them NOT move to Gen1 and Gen2. By putting space between them
// we ensure that object get a chance to move independently (even if some are pinned).
var dummyObject = new object();
m_NotGen2.Add(newBuffer);
}
Мне стало интересно, что означает ссылка на вилку? При попытке привязать объект в памяти не будет ли адрес GC указывать конкретный адрес, указанный для объекта? Каково это поведение plug
, которое действительно делает и почему существует необходимость "пробела" между объектами?