V8 Project
v8::internal::FreeList Class Reference

#include <spaces.h>

+ Collaboration diagram for v8::internal::FreeList:

Public Member Functions

 FreeList (PagedSpace *owner)
 
intptr_t Concatenate (FreeList *free_list)
 
void Reset ()
 
intptr_t available ()
 
int Free (Address start, int size_in_bytes)
 
MUST_USE_RESULT HeapObjectAllocate (int size_in_bytes)
 
bool IsEmpty ()
 
void RepairLists (Heap *heap)
 
intptr_t EvictFreeListItems (Page *p)
 
bool ContainsPageFreeListItems (Page *p)
 
FreeListCategorysmall_list ()
 
FreeListCategorymedium_list ()
 
FreeListCategorylarge_list ()
 
FreeListCategoryhuge_list ()
 

Static Public Member Functions

static int GuaranteedAllocatable (int maximum_freed)
 

Private Member Functions

FreeListNodeFindNodeFor (int size_in_bytes, int *node_size)
 
 DISALLOW_IMPLICIT_CONSTRUCTORS (FreeList)
 

Private Attributes

PagedSpaceowner_
 
Heapheap_
 
FreeListCategory small_list_
 
FreeListCategory medium_list_
 
FreeListCategory large_list_
 
FreeListCategory huge_list_
 

Static Private Attributes

static const int kMinBlockSize = 3 * kPointerSize
 
static const int kMaxBlockSize = Page::kMaxRegularHeapObjectSize
 
static const int kSmallListMin = 0x20 * kPointerSize
 
static const int kSmallListMax = 0xff * kPointerSize
 
static const int kMediumListMax = 0x7ff * kPointerSize
 
static const int kLargeListMax = 0x3fff * kPointerSize
 
static const int kSmallAllocationMax = kSmallListMin - kPointerSize
 
static const int kMediumAllocationMax = kSmallListMax
 
static const int kLargeAllocationMax = kMediumListMax
 

Detailed Description

Definition at line 1515 of file spaces.h.

Constructor & Destructor Documentation

◆ FreeList()

v8::internal::FreeList::FreeList ( PagedSpace owner)
explicit

Definition at line 2154 of file spaces.cc.

2154  : owner_(owner), heap_(owner->heap()) {
2155  Reset();
2156 }
PagedSpace * owner_
Definition: spaces.h:1588

References Reset().

+ Here is the call graph for this function:

Member Function Documentation

◆ Allocate()

HeapObject * v8::internal::FreeList::Allocate ( int  size_in_bytes)

Definition at line 2326 of file spaces.cc.

2326  {
2327  DCHECK(0 < size_in_bytes);
2328  DCHECK(size_in_bytes <= kMaxBlockSize);
2329  DCHECK(IsAligned(size_in_bytes, kPointerSize));
2330  // Don't free list allocate if there is linear space available.
2331  DCHECK(owner_->limit() - owner_->top() < size_in_bytes);
2332 
2333  int old_linear_size = static_cast<int>(owner_->limit() - owner_->top());
2334  // Mark the old linear allocation area with a free space map so it can be
2335  // skipped when scanning the heap. This also puts it back in the free list
2336  // if it is big enough.
2337  owner_->Free(owner_->top(), old_linear_size);
2338 
2339  owner_->heap()->incremental_marking()->OldSpaceStep(size_in_bytes -
2340  old_linear_size);
2341 
2342  int new_node_size = 0;
2343  FreeListNode* new_node = FindNodeFor(size_in_bytes, &new_node_size);
2344  if (new_node == NULL) {
2346  return NULL;
2347  }
2348 
2349  int bytes_left = new_node_size - size_in_bytes;
2350  DCHECK(bytes_left >= 0);
2351 
2352 #ifdef DEBUG
2353  for (int i = 0; i < size_in_bytes / kPointerSize; i++) {
2354  reinterpret_cast<Object**>(new_node->address())[i] =
2356  }
2357 #endif
2358 
2359  // The old-space-step might have finished sweeping and restarted marking.
2360  // Verify that it did not turn the page of the new node into an evacuation
2361  // candidate.
2362  DCHECK(!MarkCompactCollector::IsOnEvacuationCandidate(new_node));
2363 
2364  const int kThreshold = IncrementalMarking::kAllocatedThreshold;
2365 
2366  // Memory in the linear allocation area is counted as allocated. We may free
2367  // a little of this again immediately - see below.
2368  owner_->Allocate(new_node_size);
2369 
2371  // Keep the linear allocation area empty if requested to do so, just
2372  // return area back to the free list instead.
2373  owner_->Free(new_node->address() + size_in_bytes, bytes_left);
2374  DCHECK(owner_->top() == NULL && owner_->limit() == NULL);
2375  } else if (bytes_left > kThreshold &&
2377  FLAG_incremental_marking_steps) {
2378  int linear_size = owner_->RoundSizeDownToObjectAlignment(kThreshold);
2379  // We don't want to give too large linear areas to the allocator while
2380  // incremental marking is going on, because we won't check again whether
2381  // we want to do another increment until the linear area is used up.
2382  owner_->Free(new_node->address() + size_in_bytes + linear_size,
2383  new_node_size - size_in_bytes - linear_size);
2384  owner_->SetTopAndLimit(new_node->address() + size_in_bytes,
2385  new_node->address() + size_in_bytes + linear_size);
2386  } else if (bytes_left > 0) {
2387  // Normally we give the rest of the node to the allocator as its new
2388  // linear allocation area.
2389  owner_->SetTopAndLimit(new_node->address() + size_in_bytes,
2390  new_node->address() + new_node_size);
2391  } else {
2392  // TODO(gc) Try not freeing linear allocation region when bytes_left
2393  // are zero.
2395  }
2396 
2397  return new_node;
2398 }
FreeListNode * FindNodeFor(int size_in_bytes, int *node_size)
Definition: spaces.cc:2211
static const int kMaxBlockSize
Definition: spaces.h:1584
bool inline_allocation_disabled()
Definition: heap.h:1044
IncrementalMarking * incremental_marking()
Definition: heap.h:1205
static const intptr_t kAllocatedThreshold
void OldSpaceStep(intptr_t allocated)
void SetTopAndLimit(Address top, Address limit)
Definition: spaces.h:1780
int Free(Address start, int size_in_bytes)
Definition: spaces.h:1770
void Allocate(int bytes)
Definition: spaces.h:1797
static Smi * FromInt(int value)
Definition: objects-inl.h:1321
virtual int RoundSizeDownToObjectAlignment(int size)
Definition: spaces.h:838
Heap * heap() const
Definition: spaces.h:823
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long enable alignment of csp to bytes on platforms which prefer the register to always be NULL
#define DCHECK(condition)
Definition: logging.h:205
const int kPointerSize
Definition: globals.h:129
kSerializedDataOffset Object
Definition: objects-inl.h:5322
const int kCodeZapValue
Definition: globals.h:278
bool IsAligned(T value, U alignment)
Definition: utils.h:123

References v8::internal::HeapObject::address(), v8::internal::PagedSpace::Allocate(), DCHECK, FindNodeFor(), v8::internal::PagedSpace::Free(), v8::internal::Smi::FromInt(), v8::internal::Space::heap(), v8::internal::Heap::incremental_marking(), v8::internal::Heap::inline_allocation_disabled(), v8::internal::IsAligned(), v8::internal::IncrementalMarking::IsMarkingIncomplete(), v8::internal::IncrementalMarking::kAllocatedThreshold, v8::internal::kCodeZapValue, kMaxBlockSize, v8::internal::kPointerSize, v8::internal::PagedSpace::limit(), NULL, v8::internal::IncrementalMarking::OldSpaceStep(), owner_, v8::internal::Space::RoundSizeDownToObjectAlignment(), v8::internal::PagedSpace::SetTopAndLimit(), and v8::internal::PagedSpace::top().

Referenced by v8::internal::PagedSpace::AllocateRaw(), v8::internal::PagedSpace::SlowAllocateRaw(), and v8::internal::PagedSpace::WaitForSweeperThreadsAndRetryAllocation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ available()

intptr_t v8::internal::FreeList::available ( )
inline

Definition at line 1525 of file spaces.h.

1525  {
1528  }
FreeListCategory huge_list_
Definition: spaces.h:1601
FreeListCategory medium_list_
Definition: spaces.h:1599
FreeListCategory large_list_
Definition: spaces.h:1600
FreeListCategory small_list_
Definition: spaces.h:1598

References v8::internal::FreeListCategory::available(), huge_list_, large_list_, medium_list_, and small_list_.

Referenced by v8::internal::PagedSpace::Available(), FindNodeFor(), Free(), and v8::internal::PagedSpace::SlowAllocateRaw().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Concatenate()

intptr_t v8::internal::FreeList::Concatenate ( FreeList free_list)

Definition at line 2159 of file spaces.cc.

2159  {
2160  intptr_t free_bytes = 0;
2161  free_bytes += small_list_.Concatenate(free_list->small_list());
2162  free_bytes += medium_list_.Concatenate(free_list->medium_list());
2163  free_bytes += large_list_.Concatenate(free_list->large_list());
2164  free_bytes += huge_list_.Concatenate(free_list->huge_list());
2165  return free_bytes;
2166 }
intptr_t Concatenate(FreeListCategory *category)
Definition: spaces.cc:2028

References v8::internal::FreeListCategory::Concatenate(), huge_list(), huge_list_, large_list(), large_list_, medium_list(), medium_list_, small_list(), and small_list_.

Referenced by v8::internal::MarkCompactCollector::SweepInParallel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ContainsPageFreeListItems()

bool v8::internal::FreeList::ContainsPageFreeListItems ( Page p)

Definition at line 2418 of file spaces.cc.

References v8::internal::FreeListCategory::EvictFreeListItemsInList(), huge_list_, large_list_, medium_list_, and small_list_.

Referenced by v8::internal::PagedSpace::FreeEmergencyMemory(), and v8::internal::PagedSpace::ReleasePage().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DISALLOW_IMPLICIT_CONSTRUCTORS()

v8::internal::FreeList::DISALLOW_IMPLICIT_CONSTRUCTORS ( FreeList  )
private

◆ EvictFreeListItems()

intptr_t v8::internal::FreeList::EvictFreeListItems ( Page p)

Definition at line 2401 of file spaces.cc.

2401  {
2402  intptr_t sum = huge_list_.EvictFreeListItemsInList(p);
2403  p->set_available_in_huge_free_list(0);
2404 
2405  if (sum < p->area_size()) {
2409  p->set_available_in_small_free_list(0);
2410  p->set_available_in_medium_free_list(0);
2411  p->set_available_in_large_free_list(0);
2412  }
2413 
2414  return sum;
2415 }

References v8::internal::FreeListCategory::EvictFreeListItemsInList(), huge_list_, large_list_, medium_list_, and small_list_.

Referenced by v8::internal::PagedSpace::ReleasePage().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ FindNodeFor()

FreeListNode * v8::internal::FreeList::FindNodeFor ( int  size_in_bytes,
int node_size 
)
private

Definition at line 2211 of file spaces.cc.

2211  {
2212  FreeListNode* node = NULL;
2213  Page* page = NULL;
2214 
2215  if (size_in_bytes <= kSmallAllocationMax) {
2216  node = small_list_.PickNodeFromList(node_size);
2217  if (node != NULL) {
2218  DCHECK(size_in_bytes <= *node_size);
2219  page = Page::FromAddress(node->address());
2220  page->add_available_in_small_free_list(-(*node_size));
2221  DCHECK(IsVeryLong() || available() == SumFreeLists());
2222  return node;
2223  }
2224  }
2225 
2226  if (size_in_bytes <= kMediumAllocationMax) {
2227  node = medium_list_.PickNodeFromList(node_size);
2228  if (node != NULL) {
2229  DCHECK(size_in_bytes <= *node_size);
2230  page = Page::FromAddress(node->address());
2231  page->add_available_in_medium_free_list(-(*node_size));
2232  DCHECK(IsVeryLong() || available() == SumFreeLists());
2233  return node;
2234  }
2235  }
2236 
2237  if (size_in_bytes <= kLargeAllocationMax) {
2238  node = large_list_.PickNodeFromList(node_size);
2239  if (node != NULL) {
2240  DCHECK(size_in_bytes <= *node_size);
2241  page = Page::FromAddress(node->address());
2242  page->add_available_in_large_free_list(-(*node_size));
2243  DCHECK(IsVeryLong() || available() == SumFreeLists());
2244  return node;
2245  }
2246  }
2247 
2248  int huge_list_available = huge_list_.available();
2249  FreeListNode* top_node = huge_list_.top();
2250  for (FreeListNode** cur = &top_node; *cur != NULL;
2251  cur = (*cur)->next_address()) {
2252  FreeListNode* cur_node = *cur;
2253  while (cur_node != NULL &&
2254  Page::FromAddress(cur_node->address())->IsEvacuationCandidate()) {
2255  int size = reinterpret_cast<FreeSpace*>(cur_node)->Size();
2256  huge_list_available -= size;
2257  page = Page::FromAddress(cur_node->address());
2258  page->add_available_in_huge_free_list(-size);
2259  cur_node = cur_node->next();
2260  }
2261 
2262  *cur = cur_node;
2263  if (cur_node == NULL) {
2265  break;
2266  }
2267 
2268  DCHECK((*cur)->map() == heap_->raw_unchecked_free_space_map());
2269  FreeSpace* cur_as_free_space = reinterpret_cast<FreeSpace*>(*cur);
2270  int size = cur_as_free_space->Size();
2271  if (size >= size_in_bytes) {
2272  // Large enough node found. Unlink it from the list.
2273  node = *cur;
2274  *cur = node->next();
2275  *node_size = size;
2276  huge_list_available -= size;
2277  page = Page::FromAddress(node->address());
2278  page->add_available_in_huge_free_list(-size);
2279  break;
2280  }
2281  }
2282 
2283  huge_list_.set_top(top_node);
2284  if (huge_list_.top() == NULL) {
2286  }
2287  huge_list_.set_available(huge_list_available);
2288 
2289  if (node != NULL) {
2290  DCHECK(IsVeryLong() || available() == SumFreeLists());
2291  return node;
2292  }
2293 
2294  if (size_in_bytes <= kSmallListMax) {
2295  node = small_list_.PickNodeFromList(size_in_bytes, node_size);
2296  if (node != NULL) {
2297  DCHECK(size_in_bytes <= *node_size);
2298  page = Page::FromAddress(node->address());
2299  page->add_available_in_small_free_list(-(*node_size));
2300  }
2301  } else if (size_in_bytes <= kMediumListMax) {
2302  node = medium_list_.PickNodeFromList(size_in_bytes, node_size);
2303  if (node != NULL) {
2304  DCHECK(size_in_bytes <= *node_size);
2305  page = Page::FromAddress(node->address());
2306  page->add_available_in_medium_free_list(-(*node_size));
2307  }
2308  } else if (size_in_bytes <= kLargeListMax) {
2309  node = large_list_.PickNodeFromList(size_in_bytes, node_size);
2310  if (node != NULL) {
2311  DCHECK(size_in_bytes <= *node_size);
2312  page = Page::FromAddress(node->address());
2313  page->add_available_in_large_free_list(-(*node_size));
2314  }
2315  }
2316 
2317  DCHECK(IsVeryLong() || available() == SumFreeLists());
2318  return node;
2319 }
FreeListNode * top() const
Definition: spaces.h:1456
void set_available(int available)
Definition: spaces.h:1470
void set_end(FreeListNode *end)
Definition: spaces.h:1466
void set_top(FreeListNode *top)
Definition: spaces.h:1460
FreeListNode * PickNodeFromList(int *node_size)
Definition: spaces.cc:2091
intptr_t available()
Definition: spaces.h:1525
static const int kSmallListMax
Definition: spaces.h:1592
static const int kLargeListMax
Definition: spaces.h:1594
static const int kSmallAllocationMax
Definition: spaces.h:1595
static const int kLargeAllocationMax
Definition: spaces.h:1597
static const int kMediumListMax
Definition: spaces.h:1593
static const int kMediumAllocationMax
Definition: spaces.h:1596
static MemoryChunk * FromAddress(Address a)
Definition: spaces.h:276
bool IsEvacuationCandidate()
Definition: spaces.h:607
enable harmony numeric enable harmony object literal extensions Optimize object size

References v8::internal::HeapObject::address(), available(), v8::internal::FreeListCategory::available(), DCHECK, v8::internal::MemoryChunk::FromAddress(), heap_, huge_list_, v8::internal::MemoryChunk::IsEvacuationCandidate(), kLargeAllocationMax, kLargeListMax, kMediumAllocationMax, kMediumListMax, kSmallAllocationMax, kSmallListMax, large_list_, medium_list_, v8::internal::FreeListNode::next(), NULL, v8::internal::FreeListCategory::PickNodeFromList(), v8::internal::FreeListCategory::set_available(), v8::internal::FreeListCategory::set_end(), v8::internal::FreeListCategory::set_top(), size, v8::internal::FreeSpace::Size(), small_list_, and v8::internal::FreeListCategory::top().

Referenced by Allocate().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Free()

int v8::internal::FreeList::Free ( Address  start,
int  size_in_bytes 
)

Definition at line 2177 of file spaces.cc.

2177  {
2178  if (size_in_bytes == 0) return 0;
2179 
2180  FreeListNode* node = FreeListNode::FromAddress(start);
2181  node->set_size(heap_, size_in_bytes);
2182  Page* page = Page::FromAddress(start);
2183 
2184  // Early return to drop too-small blocks on the floor.
2185  if (size_in_bytes < kSmallListMin) {
2186  page->add_non_available_small_blocks(size_in_bytes);
2187  return size_in_bytes;
2188  }
2189 
2190  // Insert other blocks at the head of a free list of the appropriate
2191  // magnitude.
2192  if (size_in_bytes <= kSmallListMax) {
2193  small_list_.Free(node, size_in_bytes);
2194  page->add_available_in_small_free_list(size_in_bytes);
2195  } else if (size_in_bytes <= kMediumListMax) {
2196  medium_list_.Free(node, size_in_bytes);
2197  page->add_available_in_medium_free_list(size_in_bytes);
2198  } else if (size_in_bytes <= kLargeListMax) {
2199  large_list_.Free(node, size_in_bytes);
2200  page->add_available_in_large_free_list(size_in_bytes);
2201  } else {
2202  huge_list_.Free(node, size_in_bytes);
2203  page->add_available_in_huge_free_list(size_in_bytes);
2204  }
2205 
2206  DCHECK(IsVeryLong() || available() == SumFreeLists());
2207  return 0;
2208 }
void Free(FreeListNode *node, int size_in_bytes)
Definition: spaces.cc:2130
static FreeListNode * FromAddress(Address address)
Definition: spaces.h:1406
static const int kSmallListMin
Definition: spaces.h:1591

References available(), DCHECK, v8::internal::FreeListCategory::Free(), v8::internal::MemoryChunk::FromAddress(), v8::internal::FreeListNode::FromAddress(), heap_, huge_list_, kLargeListMax, kMediumListMax, kSmallListMax, kSmallListMin, large_list_, medium_list_, v8::internal::FreeListNode::set_size(), and small_list_.

Referenced by v8::internal::PagedSpace::Free(), and v8::internal::Free().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GuaranteedAllocatable()

static int v8::internal::FreeList::GuaranteedAllocatable ( int  maximum_freed)
inlinestatic

Definition at line 1540 of file spaces.h.

1540  {
1541  if (maximum_freed < kSmallListMin) {
1542  return 0;
1543  } else if (maximum_freed <= kSmallListMax) {
1544  return kSmallAllocationMax;
1545  } else if (maximum_freed <= kMediumListMax) {
1546  return kMediumAllocationMax;
1547  } else if (maximum_freed <= kLargeListMax) {
1548  return kLargeAllocationMax;
1549  }
1550  return maximum_freed;
1551  }

References kLargeAllocationMax, kLargeListMax, kMediumAllocationMax, kMediumListMax, kSmallAllocationMax, kSmallListMax, and kSmallListMin.

Referenced by v8::internal::Sweep().

+ Here is the caller graph for this function:

◆ huge_list()

FreeListCategory* v8::internal::FreeList::huge_list ( )
inline

Definition at line 1579 of file spaces.h.

1579 { return &huge_list_; }

References huge_list_.

Referenced by Concatenate().

+ Here is the caller graph for this function:

◆ IsEmpty()

bool v8::internal::FreeList::IsEmpty ( )
inline

Definition at line 1559 of file spaces.h.

1559  {
1560  return small_list_.IsEmpty() && medium_list_.IsEmpty() &&
1562  }

References huge_list_, v8::internal::FreeListCategory::IsEmpty(), large_list_, medium_list_, and small_list_.

+ Here is the call graph for this function:

◆ large_list()

FreeListCategory* v8::internal::FreeList::large_list ( )
inline

Definition at line 1578 of file spaces.h.

1578 { return &large_list_; }

References large_list_.

Referenced by Concatenate().

+ Here is the caller graph for this function:

◆ medium_list()

FreeListCategory* v8::internal::FreeList::medium_list ( )
inline

Definition at line 1577 of file spaces.h.

1577 { return &medium_list_; }

References medium_list_.

Referenced by Concatenate().

+ Here is the caller graph for this function:

◆ RepairLists()

void v8::internal::FreeList::RepairLists ( Heap heap)

Definition at line 2426 of file spaces.cc.

2426  {
2430  huge_list_.RepairFreeList(heap);
2431 }
void RepairFreeList(Heap *heap)
Definition: spaces.cc:2140

References huge_list_, large_list_, medium_list_, v8::internal::FreeListCategory::RepairFreeList(), and small_list_.

Referenced by v8::internal::PagedSpace::RepairFreeListsAfterBoot().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Reset()

void v8::internal::FreeList::Reset ( )

Definition at line 2169 of file spaces.cc.

2169  {
2170  small_list_.Reset();
2171  medium_list_.Reset();
2172  large_list_.Reset();
2173  huge_list_.Reset();
2174 }

References huge_list_, large_list_, medium_list_, v8::internal::FreeListCategory::Reset(), and small_list_.

Referenced by FreeList(), v8::internal::PagedSpace::PrepareForMarkCompact(), and v8::internal::PagedSpace::ResetFreeList().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ small_list()

FreeListCategory* v8::internal::FreeList::small_list ( )
inline

Definition at line 1576 of file spaces.h.

1576 { return &small_list_; }

References small_list_.

Referenced by Concatenate().

+ Here is the caller graph for this function:

Member Data Documentation

◆ heap_

Heap* v8::internal::FreeList::heap_
private

Definition at line 1589 of file spaces.h.

Referenced by FindNodeFor(), and Free().

◆ huge_list_

FreeListCategory v8::internal::FreeList::huge_list_
private

◆ kLargeAllocationMax

const int v8::internal::FreeList::kLargeAllocationMax = kMediumListMax
staticprivate

Definition at line 1597 of file spaces.h.

Referenced by FindNodeFor(), and GuaranteedAllocatable().

◆ kLargeListMax

const int v8::internal::FreeList::kLargeListMax = 0x3fff * kPointerSize
staticprivate

Definition at line 1594 of file spaces.h.

Referenced by FindNodeFor(), Free(), and GuaranteedAllocatable().

◆ kMaxBlockSize

const int v8::internal::FreeList::kMaxBlockSize = Page::kMaxRegularHeapObjectSize
staticprivate

Definition at line 1584 of file spaces.h.

Referenced by Allocate().

◆ kMediumAllocationMax

const int v8::internal::FreeList::kMediumAllocationMax = kSmallListMax
staticprivate

Definition at line 1596 of file spaces.h.

Referenced by FindNodeFor(), and GuaranteedAllocatable().

◆ kMediumListMax

const int v8::internal::FreeList::kMediumListMax = 0x7ff * kPointerSize
staticprivate

Definition at line 1593 of file spaces.h.

Referenced by FindNodeFor(), Free(), and GuaranteedAllocatable().

◆ kMinBlockSize

const int v8::internal::FreeList::kMinBlockSize = 3 * kPointerSize
staticprivate

Definition at line 1583 of file spaces.h.

◆ kSmallAllocationMax

const int v8::internal::FreeList::kSmallAllocationMax = kSmallListMin - kPointerSize
staticprivate

Definition at line 1595 of file spaces.h.

Referenced by FindNodeFor(), and GuaranteedAllocatable().

◆ kSmallListMax

const int v8::internal::FreeList::kSmallListMax = 0xff * kPointerSize
staticprivate

Definition at line 1592 of file spaces.h.

Referenced by FindNodeFor(), Free(), and GuaranteedAllocatable().

◆ kSmallListMin

const int v8::internal::FreeList::kSmallListMin = 0x20 * kPointerSize
staticprivate

Definition at line 1591 of file spaces.h.

Referenced by Free(), and GuaranteedAllocatable().

◆ large_list_

FreeListCategory v8::internal::FreeList::large_list_
private

◆ medium_list_

FreeListCategory v8::internal::FreeList::medium_list_
private

◆ owner_

PagedSpace* v8::internal::FreeList::owner_
private

Definition at line 1588 of file spaces.h.

Referenced by Allocate().

◆ small_list_

FreeListCategory v8::internal::FreeList::small_list_
private

The documentation for this class was generated from the following files: