SmallPage* Heap::allocateSmallPage(std::lock_guard<StaticMutex>& lock, size_t sizeClass) { Vector<SmallPage*>& smallPagesWithFreeLines = m_smallPagesWithFreeLines[sizeClass]; while (smallPagesWithFreeLines.size()) { SmallPage* page = smallPagesWithFreeLines.pop(); if (!page->refCount(lock) || page->sizeClass() != sizeClass) // Page was promoted to the pages list. continue; return page; } SmallPage* page = [this, sizeClass]() { if (m_smallPages.size()) return m_smallPages.pop(); m_isAllocatingPages = true; return m_vmHeap.allocateSmallPage(); }(); page->setSizeClass(sizeClass); return page; }