Commit 37e62175 authored by Michael Achenbach's avatar Michael Achenbach Committed by Commit Bot

Revert "[heap] Reduce size of possibly empty buckets"

This reverts commit 80caf2cf.

Reason for revert: Breaks gpu tests:
https://ci.chromium.org/p/v8/builders/ci/Win%20V8%20FYI%20Release%20(NVIDIA)/5570
# Debug check failed: !possibly_empty_buckets->Contains(bucket_index).

Original change's description:
> [heap] Reduce size of possibly empty buckets
> 
> Before this CL a byte was used per bucket to store whether the bucket
> is possibly empty or not. This CL changes this such that each bucket
> only needs a single bit.
> 
> PossiblyEmptyBuckets is now a word in the page header. If more bits
> are needed than fit into a single word, an external bitmap is
> allocated using AlignedAlloc. Storing this on the page header, allows
> to remove initial_buckets from the SlotSet. The SlotSet allocation is
> then again a power-of-2 in release mode.
> 
> Change-Id: If61fd5cfa153f98757beeb444a530f6e2803fdb6
> Bug: chromium:1023139
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1906376
> Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
> Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#64991}

TBR=ulan@chromium.org,dinfuehr@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: chromium:1023139
Change-Id: Ia90b07b9562af934dacba012da31e4f172f2922d
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1918258Reviewed-by: 's avatarMichael Achenbach <machenbach@chromium.org>
Commit-Queue: Michael Achenbach <machenbach@chromium.org>
Cr-Commit-Position: refs/heads/master@{#65001}
parent 909f0be9
......@@ -41,6 +41,20 @@ class RememberedSetOperations {
return slots;
}
template <typename Callback>
static int IterateAndTrackEmptyBuckets(
SlotSet* slot_set, MemoryChunk* chunk, Callback callback,
Worklist<MemoryChunk*, 64>::View empty_chunks) {
int slots = 0;
if (slot_set != nullptr) {
bool found_empty_bucket = false;
slots += slot_set->IterateAndTrackEmptyBuckets(
chunk->address(), chunk->buckets(), callback, &found_empty_bucket);
if (found_empty_bucket) empty_chunks.Push(chunk);
}
return slots;
}
static void Remove(SlotSet* slot_set, MemoryChunk* chunk, Address slot_addr) {
if (slot_set != nullptr) {
uintptr_t offset = slot_addr - chunk->address();
......@@ -154,16 +168,12 @@ class RememberedSet : public AllStatic {
static int IterateAndTrackEmptyBuckets(
MemoryChunk* chunk, Callback callback,
Worklist<MemoryChunk*, 64>::View empty_chunks) {
SlotSet* slot_set = chunk->slot_set<type>();
int slots = 0;
if (slot_set != nullptr) {
PossiblyEmptyBuckets* possibly_empty_buckets =
chunk->possibly_empty_buckets();
slots += slot_set->IterateAndTrackEmptyBuckets(
chunk->address(), chunk->buckets(), callback, possibly_empty_buckets);
if (!possibly_empty_buckets->IsEmpty()) empty_chunks.Push(chunk);
}
return slots;
SlotSet* slots = chunk->slot_set<type>();
bool empty_bucket_found = false;
int slot_count = RememberedSetOperations::IterateAndTrackEmptyBuckets(
slots, chunk, callback, empty_chunks);
if (empty_bucket_found) empty_chunks.Push(chunk);
return slot_count;
}
static void FreeEmptyBuckets(MemoryChunk* chunk) {
......@@ -178,8 +188,7 @@ class RememberedSet : public AllStatic {
DCHECK(type == OLD_TO_NEW);
SlotSet* slot_set = chunk->slot_set<type, AccessMode::NON_ATOMIC>();
if (slot_set != nullptr &&
slot_set->CheckPossiblyEmptyBuckets(chunk->buckets(),
chunk->possibly_empty_buckets())) {
slot_set->CheckPossiblyEmptyBuckets(chunk->buckets())) {
chunk->ReleaseSlotSet<type>();
return true;
}
......
......@@ -373,7 +373,9 @@ void ScavengerCollector::CollectGarbage() {
#ifdef DEBUG
RememberedSet<OLD_TO_NEW>::IterateMemoryChunks(
heap_, [](MemoryChunk* chunk) {
DCHECK(chunk->possibly_empty_buckets()->IsEmpty());
SlotSet* slot_set = chunk->slot_set<OLD_TO_NEW>();
DCHECK_IMPLIES(slot_set != nullptr,
slot_set->IsPossiblyEmptyCleared());
});
#endif
}
......
......@@ -23,105 +23,6 @@ namespace internal {
enum SlotCallbackResult { KEEP_SLOT, REMOVE_SLOT };
// Possibly empty buckets (buckets that do not contain any slots) are discovered
// by the scavenger. Buckets might become non-empty when promoting objects later
// or in another thread, so all those buckets need to be revisited.
// Track possibly empty buckets within a SlotSet in this data structure. The
// class contains a word-sized bitmap, in case more bits are needed the bitmap
// is replaced with a pointer to a malloc-allocated bitmap.
class PossiblyEmptyBuckets {
public:
PossiblyEmptyBuckets() : bitmap_(kNullAddress) {}
PossiblyEmptyBuckets(PossiblyEmptyBuckets&& other) V8_NOEXCEPT
: bitmap_(other.bitmap_) {
other.bitmap_ = kNullAddress;
}
~PossiblyEmptyBuckets() { Release(); }
void Initialize() {
bitmap_ = kNullAddress;
DCHECK(!IsAllocated());
}
void Release() {
if (IsAllocated()) {
AlignedFree(BitmapArray());
}
bitmap_ = kNullAddress;
DCHECK(!IsAllocated());
}
void Insert(size_t bucket_index, size_t buckets) {
if (IsAllocated()) {
InsertAllocated(bucket_index);
} else if (bucket_index + 1 < kBitsPerWord) {
bitmap_ |= static_cast<uintptr_t>(1) << (bucket_index + 1);
} else {
Allocate(buckets);
InsertAllocated(bucket_index);
}
}
bool Contains(size_t bucket_index) {
if (IsAllocated()) {
size_t word_idx = bucket_index / kBitsPerWord;
uintptr_t* word = BitmapArray() + word_idx;
return *word &
(static_cast<uintptr_t>(1) << (bucket_index % kBitsPerWord));
} else if (bucket_index + 1 < kBitsPerWord) {
return bitmap_ & (static_cast<uintptr_t>(1) << (bucket_index + 1));
} else {
return false;
}
}
bool IsEmpty() { return bitmap_ == kNullAddress; }
private:
Address bitmap_;
static const Address kPointerTag = 1;
static const int kWordSize = sizeof(uintptr_t);
static const int kBitsPerWord = kWordSize * kBitsPerByte;
bool IsAllocated() { return bitmap_ & kPointerTag; }
void Allocate(size_t buckets) {
DCHECK(!IsAllocated());
size_t words = WordsForBuckets(buckets);
uintptr_t* ptr = reinterpret_cast<uintptr_t*>(
AlignedAlloc(words * kWordSize, kSystemPointerSize));
ptr[0] = bitmap_ >> 1;
for (size_t word_idx = 1; word_idx < words; word_idx++) {
ptr[word_idx] = 0;
}
bitmap_ = reinterpret_cast<Address>(ptr) + kPointerTag;
DCHECK(IsAllocated());
}
void InsertAllocated(size_t bucket_index) {
DCHECK(IsAllocated());
size_t word_idx = bucket_index / kBitsPerWord;
uintptr_t* word = BitmapArray() + word_idx;
*word |= static_cast<uintptr_t>(1) << (bucket_index % kBitsPerWord);
}
static size_t WordsForBuckets(size_t buckets) {
return (buckets / kBitsPerByte + kWordSize - 1) & ~(kWordSize - 1);
}
uintptr_t* BitmapArray() {
DCHECK(IsAllocated());
return reinterpret_cast<uintptr_t*>(bitmap_ & ~kPointerTag);
}
DISALLOW_COPY_AND_ASSIGN(PossiblyEmptyBuckets);
};
STATIC_ASSERT(std::is_standard_layout<PossiblyEmptyBuckets>::value);
STATIC_ASSERT(sizeof(PossiblyEmptyBuckets) == kSystemPointerSize);
// Data structure for maintaining a set of slots in a standard (non-large)
// page.
// The data structure assumes that the slots are pointer size aligned and
......@@ -134,33 +35,42 @@ class SlotSet {
KEEP_EMPTY_BUCKETS // An empty bucket will be kept.
};
enum class PossiblyEmpty : uint8_t {
kYes, // Bucket is non-null but might be empty.
kNoOrNull, // Bucket is null or cannot be empty.
};
SlotSet() = delete;
static SlotSet* Allocate(size_t buckets) {
// SlotSet* slot_set --+
// |
// v
// +-----------------+-------------------------+
// | initial buckets | buckets array |
// +-----------------+-------------------------+
// pointer-sized pointer-sized * buckets
// SlotSet* slot_set ----------------------+
// |
// v
// +----------------------+-----------------+-------------------------+
// | possibly empty array | initial buckets | buckets array |
// +----------------------+-----------------+-------------------------+
// 1 byte * buckets pointer-sized pointer-sized * buckets
//
//
// The SlotSet pointer points to the beginning of the buckets array for
// faster access in the write barrier. The number of buckets is needed for
// calculating the size of this data structure.
// Since pages can shrink we also store the initial_buckets size.
//
size_t possibly_empty_array_size = PossiblyEmptyArraySize(buckets);
size_t buckets_size = buckets * sizeof(Bucket*);
size_t size = kInitialBucketsSize + buckets_size;
size_t size =
possibly_empty_array_size + kInitialBucketsSize + buckets_size;
void* allocation = AlignedAlloc(size, kSystemPointerSize);
SlotSet* slot_set = reinterpret_cast<SlotSet*>(
reinterpret_cast<uint8_t*>(allocation) + kInitialBucketsSize);
reinterpret_cast<uint8_t*>(allocation) + possibly_empty_array_size +
kInitialBucketsSize);
DCHECK(
IsAligned(reinterpret_cast<uintptr_t>(slot_set), kSystemPointerSize));
#ifdef DEBUG
*slot_set->initial_buckets() = buckets;
#endif
for (size_t i = 0; i < buckets; i++) {
*slot_set->bucket(i) = nullptr;
*slot_set->possibly_empty(i) = PossiblyEmpty::kNoOrNull;
}
return slot_set;
}
......@@ -172,15 +82,17 @@ class SlotSet {
slot_set->ReleaseBucket(i);
}
#ifdef DEBUG
size_t initial_buckets = *slot_set->initial_buckets();
#ifdef DEBUG
for (size_t i = buckets; i < initial_buckets; i++) {
DCHECK_NULL(*slot_set->bucket(i));
}
#endif
AlignedFree(reinterpret_cast<uint8_t*>(slot_set) - kInitialBucketsSize);
size_t possibly_empty_array_size = PossiblyEmptyArraySize(initial_buckets);
AlignedFree(reinterpret_cast<uint8_t*>(slot_set) - kInitialBucketsSize -
possibly_empty_array_size);
}
static size_t BucketsForSize(size_t size) {
......@@ -348,12 +260,13 @@ class SlotSet {
// Assumes that the possibly empty-array was already cleared by
// CheckPossiblyEmptyBuckets.
template <typename Callback>
size_t IterateAndTrackEmptyBuckets(
Address chunk_start, size_t buckets, Callback callback,
PossiblyEmptyBuckets* possibly_empty_buckets) {
size_t IterateAndTrackEmptyBuckets(Address chunk_start, size_t buckets,
Callback callback,
bool* empty_bucket_found) {
return Iterate(chunk_start, buckets, callback,
[possibly_empty_buckets, buckets](size_t bucket_index) {
possibly_empty_buckets->Insert(bucket_index, buckets);
[this, empty_bucket_found](size_t bucket_index) {
*possibly_empty(bucket_index) = PossiblyEmpty::kYes;
*empty_bucket_found = true;
});
}
......@@ -370,31 +283,42 @@ class SlotSet {
// Check whether possibly empty buckets are really empty. Empty buckets are
// freed and the possibly empty state is cleared for all buckets.
bool CheckPossiblyEmptyBuckets(size_t buckets,
PossiblyEmptyBuckets* possibly_empty_buckets) {
bool CheckPossiblyEmptyBuckets(size_t buckets) {
bool empty = true;
for (size_t bucket_index = 0; bucket_index < buckets; bucket_index++) {
Bucket* bucket = LoadBucket<AccessMode::NON_ATOMIC>(bucket_index);
if (bucket) {
if (possibly_empty_buckets->Contains(bucket_index)) {
if (*possibly_empty(bucket_index) == PossiblyEmpty::kYes) {
if (bucket->IsEmpty()) {
ReleaseBucket<AccessMode::NON_ATOMIC>(bucket_index);
} else {
empty = false;
}
*possibly_empty(bucket_index) = PossiblyEmpty::kNoOrNull;
} else {
empty = false;
}
} else {
DCHECK(!possibly_empty_buckets->Contains(bucket_index));
DCHECK_EQ(*possibly_empty(bucket_index), PossiblyEmpty::kNoOrNull);
}
}
possibly_empty_buckets->Release();
return empty;
}
// Check wether all possibly empty entries are cleared. Only used
// for testing in debug-builds.
bool IsPossiblyEmptyCleared() {
size_t buckets = *initial_buckets();
for (size_t bucket_index = 0; bucket_index < buckets; bucket_index++) {
if (*possibly_empty(bucket_index) != PossiblyEmpty::kNoOrNull) {
return false;
}
}
return true;
}
static const int kCellsPerBucket = 32;
static const int kCellsPerBucketLog2 = 5;
static const int kCellSizeBytesLog2 = 2;
......@@ -576,15 +500,20 @@ class SlotSet {
*bit_index = static_cast<int>(slot & (kBitsPerCell - 1));
}
static size_t PossiblyEmptyArraySize(size_t buckets) {
return (sizeof(PossiblyEmpty) * buckets + (kSystemPointerSize - 1)) /
kSystemPointerSize * kSystemPointerSize;
}
Bucket** buckets() { return reinterpret_cast<Bucket**>(this); }
Bucket** bucket(size_t bucket_index) { return buckets() + bucket_index; }
PossiblyEmpty* possibly_empty(size_t bucket_index) {
return reinterpret_cast<PossiblyEmpty*>(buckets()) - kInitialBucketsSize -
1 - bucket_index;
}
#ifdef DEBUG
size_t* initial_buckets() { return reinterpret_cast<size_t*>(this) - 1; }
static const int kInitialBucketsSize = sizeof(size_t);
#else
static const int kInitialBucketsSize = 0;
#endif
};
STATIC_ASSERT(std::is_standard_layout<SlotSet>::value);
......
......@@ -750,8 +750,6 @@ MemoryChunk* MemoryChunk::Initialize(Heap* heap, Address base, size_t size,
chunk->code_object_registry_ = nullptr;
}
chunk->possibly_empty_buckets_.Initialize();
return chunk;
}
......@@ -1396,7 +1394,6 @@ void MemoryChunk::ReleaseAllocatedMemoryNeededForWritableChunk() {
code_object_registry_ = nullptr;
}
possibly_empty_buckets_.Release();
ReleaseSlotSet<OLD_TO_NEW>();
ReleaseSweepingSlotSet();
ReleaseSlotSet<OLD_TO_OLD>();
......
......@@ -24,7 +24,6 @@
#include "src/heap/heap.h"
#include "src/heap/invalidated-slots.h"
#include "src/heap/marking.h"
#include "src/heap/slot-set.h"
#include "src/objects/free-space.h"
#include "src/objects/heap-object.h"
#include "src/objects/map.h"
......@@ -623,8 +622,7 @@ class MemoryChunk : public BasicMemoryChunk {
+ kSystemPointerSize // LocalArrayBufferTracker* local_tracker_
+ kIntptrSize // std::atomic<intptr_t> young_generation_live_byte_count_
+ kSystemPointerSize // Bitmap* young_generation_bitmap_
+ kSystemPointerSize // CodeObjectRegistry* code_object_registry_
+ kSystemPointerSize; // PossiblyEmptyBuckets possibly_empty_buckets_
+ kSystemPointerSize; // CodeObjectRegistry* code_object_registry_
// Page size in bytes. This must be a multiple of the OS page size.
static const int kPageSize = 1 << kPageSizeBits;
......@@ -871,10 +869,6 @@ class MemoryChunk : public BasicMemoryChunk {
FreeList* free_list() { return owner()->free_list(); }
PossiblyEmptyBuckets* possibly_empty_buckets() {
return &possibly_empty_buckets_;
}
protected:
static MemoryChunk* Initialize(Heap* heap, Address base, size_t size,
Address area_start, Address area_end,
......@@ -970,8 +964,6 @@ class MemoryChunk : public BasicMemoryChunk {
CodeObjectRegistry* code_object_registry_;
PossiblyEmptyBuckets possibly_empty_buckets_;
private:
void InitializeReservedMemory() { reservation_.Reset(); }
......
......@@ -110,20 +110,6 @@ TEST(SlotSet, Remove) {
SlotSet::Delete(set, SlotSet::kBucketsRegularPage);
}
TEST(PossiblyEmptyBuckets, ContainsAndInsert) {
static const int kBuckets = 100;
PossiblyEmptyBuckets possibly_empty_buckets;
possibly_empty_buckets.Insert(0, kBuckets);
int last = sizeof(uintptr_t) * kBitsPerByte - 2;
possibly_empty_buckets.Insert(last, kBuckets);
EXPECT_TRUE(possibly_empty_buckets.Contains(0));
EXPECT_TRUE(possibly_empty_buckets.Contains(last));
possibly_empty_buckets.Insert(last + 1, kBuckets);
EXPECT_TRUE(possibly_empty_buckets.Contains(0));
EXPECT_TRUE(possibly_empty_buckets.Contains(last));
EXPECT_TRUE(possibly_empty_buckets.Contains(last + 1));
}
void CheckRemoveRangeOn(uint32_t start, uint32_t end) {
SlotSet* set = SlotSet::Allocate(SlotSet::kBucketsRegularPage);
uint32_t first = start == 0 ? 0 : start - kTaggedSize;
......
......@@ -190,228 +190,228 @@ INSTANCE_TYPES = {
# List of known V8 maps.
KNOWN_MAPS = {
("read_only_space", 0x00121): (161, "FreeSpaceMap"),
("read_only_space", 0x00169): (162, "MetaMap"),
("read_only_space", 0x001e1): (67, "NullMap"),
("read_only_space", 0x00241): (156, "DescriptorArrayMap"),
("read_only_space", 0x00299): (151, "WeakFixedArrayMap"),
("read_only_space", 0x002e1): (160, "OnePointerFillerMap"),
("read_only_space", 0x00329): (160, "TwoPointerFillerMap"),
("read_only_space", 0x003a1): (67, "UninitializedMap"),
("read_only_space", 0x00409): (8, "OneByteInternalizedStringMap"),
("read_only_space", 0x004a1): (67, "UndefinedMap"),
("read_only_space", 0x004f9): (66, "HeapNumberMap"),
("read_only_space", 0x00571): (67, "TheHoleMap"),
("read_only_space", 0x00611): (67, "BooleanMap"),
("read_only_space", 0x006e1): (133, "ByteArrayMap"),
("read_only_space", 0x00729): (118, "FixedArrayMap"),
("read_only_space", 0x00771): (118, "FixedCOWArrayMap"),
("read_only_space", 0x007b9): (119, "HashTableMap"),
("read_only_space", 0x00801): (64, "SymbolMap"),
("read_only_space", 0x00849): (40, "OneByteStringMap"),
("read_only_space", 0x00891): (131, "ScopeInfoMap"),
("read_only_space", 0x008d9): (166, "SharedFunctionInfoMap"),
("read_only_space", 0x00921): (154, "CodeMap"),
("read_only_space", 0x00969): (153, "CellMap"),
("read_only_space", 0x009b1): (165, "GlobalPropertyCellMap"),
("read_only_space", 0x009f9): (70, "ForeignMap"),
("read_only_space", 0x00a41): (152, "TransitionArrayMap"),
("read_only_space", 0x00a89): (45, "ThinOneByteStringMap"),
("read_only_space", 0x00ad1): (159, "FeedbackVectorMap"),
("read_only_space", 0x00b69): (67, "ArgumentsMarkerMap"),
("read_only_space", 0x00c01): (67, "ExceptionMap"),
("read_only_space", 0x00c99): (67, "TerminationExceptionMap"),
("read_only_space", 0x00d39): (67, "OptimizedOutMap"),
("read_only_space", 0x00dd1): (67, "StaleRegisterMap"),
("read_only_space", 0x00e39): (132, "ScriptContextTableMap"),
("read_only_space", 0x00e81): (129, "ClosureFeedbackCellArrayMap"),
("read_only_space", 0x00ec9): (158, "FeedbackMetadataArrayMap"),
("read_only_space", 0x00f11): (118, "ArrayListMap"),
("read_only_space", 0x00f59): (65, "BigIntMap"),
("read_only_space", 0x00fa1): (130, "ObjectBoilerplateDescriptionMap"),
("read_only_space", 0x00fe9): (134, "BytecodeArrayMap"),
("read_only_space", 0x01031): (155, "CodeDataContainerMap"),
("read_only_space", 0x01079): (135, "FixedDoubleArrayMap"),
("read_only_space", 0x010c1): (121, "GlobalDictionaryMap"),
("read_only_space", 0x01109): (93, "ManyClosuresCellMap"),
("read_only_space", 0x01151): (118, "ModuleInfoMap"),
("read_only_space", 0x01199): (122, "NameDictionaryMap"),
("read_only_space", 0x011e1): (93, "NoClosuresCellMap"),
("read_only_space", 0x01229): (123, "NumberDictionaryMap"),
("read_only_space", 0x01271): (93, "OneClosureCellMap"),
("read_only_space", 0x012b9): (124, "OrderedHashMapMap"),
("read_only_space", 0x01301): (125, "OrderedHashSetMap"),
("read_only_space", 0x01349): (126, "OrderedNameDictionaryMap"),
("read_only_space", 0x01391): (163, "PreparseDataMap"),
("read_only_space", 0x013d9): (164, "PropertyArrayMap"),
("read_only_space", 0x01421): (89, "SideEffectCallHandlerInfoMap"),
("read_only_space", 0x01469): (89, "SideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x014b1): (89, "NextCallSideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x014f9): (127, "SimpleNumberDictionaryMap"),
("read_only_space", 0x01541): (118, "SloppyArgumentsElementsMap"),
("read_only_space", 0x01589): (146, "SmallOrderedHashMapMap"),
("read_only_space", 0x015d1): (147, "SmallOrderedHashSetMap"),
("read_only_space", 0x01619): (148, "SmallOrderedNameDictionaryMap"),
("read_only_space", 0x01661): (68, "SourceTextModuleMap"),
("read_only_space", 0x016a9): (128, "StringTableMap"),
("read_only_space", 0x016f1): (69, "SyntheticModuleMap"),
("read_only_space", 0x01739): (150, "UncompiledDataWithoutPreparseDataMap"),
("read_only_space", 0x01781): (149, "UncompiledDataWithPreparseDataMap"),
("read_only_space", 0x017c9): (167, "WeakArrayListMap"),
("read_only_space", 0x01811): (120, "EphemeronHashTableMap"),
("read_only_space", 0x01859): (157, "EmbedderDataArrayMap"),
("read_only_space", 0x018a1): (168, "WeakCellMap"),
("read_only_space", 0x018e9): (32, "StringMap"),
("read_only_space", 0x01931): (41, "ConsOneByteStringMap"),
("read_only_space", 0x01979): (33, "ConsStringMap"),
("read_only_space", 0x019c1): (37, "ThinStringMap"),
("read_only_space", 0x01a09): (35, "SlicedStringMap"),
("read_only_space", 0x01a51): (43, "SlicedOneByteStringMap"),
("read_only_space", 0x01a99): (34, "ExternalStringMap"),
("read_only_space", 0x01ae1): (42, "ExternalOneByteStringMap"),
("read_only_space", 0x01b29): (50, "UncachedExternalStringMap"),
("read_only_space", 0x01b71): (0, "InternalizedStringMap"),
("read_only_space", 0x01bb9): (2, "ExternalInternalizedStringMap"),
("read_only_space", 0x01c01): (10, "ExternalOneByteInternalizedStringMap"),
("read_only_space", 0x01c49): (18, "UncachedExternalInternalizedStringMap"),
("read_only_space", 0x01c91): (26, "UncachedExternalOneByteInternalizedStringMap"),
("read_only_space", 0x01cd9): (58, "UncachedExternalOneByteStringMap"),
("read_only_space", 0x01d21): (67, "SelfReferenceMarkerMap"),
("read_only_space", 0x01d81): (92, "EnumCacheMap"),
("read_only_space", 0x01e19): (86, "ArrayBoilerplateDescriptionMap"),
("read_only_space", 0x02001): (95, "InterceptorInfoMap"),
("read_only_space", 0x04971): (71, "PromiseFulfillReactionJobTaskMap"),
("read_only_space", 0x049b9): (72, "PromiseRejectReactionJobTaskMap"),
("read_only_space", 0x04a01): (73, "CallableTaskMap"),
("read_only_space", 0x04a49): (74, "CallbackTaskMap"),
("read_only_space", 0x04a91): (75, "PromiseResolveThenableJobTaskMap"),
("read_only_space", 0x04ad9): (78, "FunctionTemplateInfoMap"),
("read_only_space", 0x04b21): (79, "ObjectTemplateInfoMap"),
("read_only_space", 0x04b69): (80, "AccessCheckInfoMap"),
("read_only_space", 0x04bb1): (81, "AccessorInfoMap"),
("read_only_space", 0x04bf9): (82, "AccessorPairMap"),
("read_only_space", 0x04c41): (83, "AliasedArgumentsEntryMap"),
("read_only_space", 0x04c89): (84, "AllocationMementoMap"),
("read_only_space", 0x04cd1): (87, "AsmWasmDataMap"),
("read_only_space", 0x04d19): (88, "AsyncGeneratorRequestMap"),
("read_only_space", 0x04d61): (90, "ClassPositionsMap"),
("read_only_space", 0x04da9): (91, "DebugInfoMap"),
("read_only_space", 0x04df1): (94, "FunctionTemplateRareDataMap"),
("read_only_space", 0x04e39): (97, "InterpreterDataMap"),
("read_only_space", 0x04e81): (98, "PromiseCapabilityMap"),
("read_only_space", 0x04ec9): (99, "PromiseReactionMap"),
("read_only_space", 0x04f11): (100, "PrototypeInfoMap"),
("read_only_space", 0x04f59): (101, "ScriptMap"),
("read_only_space", 0x04fa1): (105, "SourcePositionTableWithFrameCacheMap"),
("read_only_space", 0x04fe9): (106, "SourceTextModuleInfoEntryMap"),
("read_only_space", 0x05031): (107, "StackFrameInfoMap"),
("read_only_space", 0x05079): (108, "StackTraceFrameMap"),
("read_only_space", 0x050c1): (109, "TemplateObjectDescriptionMap"),
("read_only_space", 0x05109): (110, "Tuple2Map"),
("read_only_space", 0x05151): (111, "Tuple3Map"),
("read_only_space", 0x05199): (112, "WasmCapiFunctionDataMap"),
("read_only_space", 0x051e1): (113, "WasmDebugInfoMap"),
("read_only_space", 0x05229): (114, "WasmExceptionTagMap"),
("read_only_space", 0x05271): (115, "WasmExportedFunctionDataMap"),
("read_only_space", 0x052b9): (116, "WasmIndirectFunctionTableMap"),
("read_only_space", 0x05301): (117, "WasmJSFunctionDataMap"),
("read_only_space", 0x05349): (96, "InternalClassMap"),
("read_only_space", 0x05391): (103, "SmiPairMap"),
("read_only_space", 0x053d9): (102, "SmiBoxMap"),
("read_only_space", 0x05421): (104, "SortStateMap"),
("read_only_space", 0x05469): (85, "AllocationSiteWithWeakNextMap"),
("read_only_space", 0x054b1): (85, "AllocationSiteWithoutWeakNextMap"),
("read_only_space", 0x054f9): (76, "LoadHandler1Map"),
("read_only_space", 0x05541): (76, "LoadHandler2Map"),
("read_only_space", 0x05589): (76, "LoadHandler3Map"),
("read_only_space", 0x055d1): (77, "StoreHandler0Map"),
("read_only_space", 0x05619): (77, "StoreHandler1Map"),
("read_only_space", 0x05661): (77, "StoreHandler2Map"),
("read_only_space", 0x056a9): (77, "StoreHandler3Map"),
("map_space", 0x00121): (1057, "ExternalMap"),
("map_space", 0x00169): (1072, "JSMessageObjectMap"),
("read_only_space", 0x00119): (161, "FreeSpaceMap"),
("read_only_space", 0x00161): (162, "MetaMap"),
("read_only_space", 0x001d9): (67, "NullMap"),
("read_only_space", 0x00239): (156, "DescriptorArrayMap"),
("read_only_space", 0x00291): (151, "WeakFixedArrayMap"),
("read_only_space", 0x002d9): (160, "OnePointerFillerMap"),
("read_only_space", 0x00321): (160, "TwoPointerFillerMap"),
("read_only_space", 0x00399): (67, "UninitializedMap"),
("read_only_space", 0x00401): (8, "OneByteInternalizedStringMap"),
("read_only_space", 0x00499): (67, "UndefinedMap"),
("read_only_space", 0x004f1): (66, "HeapNumberMap"),
("read_only_space", 0x00569): (67, "TheHoleMap"),
("read_only_space", 0x00609): (67, "BooleanMap"),
("read_only_space", 0x006d9): (133, "ByteArrayMap"),
("read_only_space", 0x00721): (118, "FixedArrayMap"),
("read_only_space", 0x00769): (118, "FixedCOWArrayMap"),
("read_only_space", 0x007b1): (119, "HashTableMap"),
("read_only_space", 0x007f9): (64, "SymbolMap"),
("read_only_space", 0x00841): (40, "OneByteStringMap"),
("read_only_space", 0x00889): (131, "ScopeInfoMap"),
("read_only_space", 0x008d1): (166, "SharedFunctionInfoMap"),
("read_only_space", 0x00919): (154, "CodeMap"),
("read_only_space", 0x00961): (153, "CellMap"),
("read_only_space", 0x009a9): (165, "GlobalPropertyCellMap"),
("read_only_space", 0x009f1): (70, "ForeignMap"),
("read_only_space", 0x00a39): (152, "TransitionArrayMap"),
("read_only_space", 0x00a81): (45, "ThinOneByteStringMap"),
("read_only_space", 0x00ac9): (159, "FeedbackVectorMap"),
("read_only_space", 0x00b61): (67, "ArgumentsMarkerMap"),
("read_only_space", 0x00bf9): (67, "ExceptionMap"),
("read_only_space", 0x00c91): (67, "TerminationExceptionMap"),
("read_only_space", 0x00d31): (67, "OptimizedOutMap"),
("read_only_space", 0x00dc9): (67, "StaleRegisterMap"),
("read_only_space", 0x00e31): (132, "ScriptContextTableMap"),
("read_only_space", 0x00e79): (129, "ClosureFeedbackCellArrayMap"),
("read_only_space", 0x00ec1): (158, "FeedbackMetadataArrayMap"),
("read_only_space", 0x00f09): (118, "ArrayListMap"),
("read_only_space", 0x00f51): (65, "BigIntMap"),
("read_only_space", 0x00f99): (130, "ObjectBoilerplateDescriptionMap"),
("read_only_space", 0x00fe1): (134, "BytecodeArrayMap"),
("read_only_space", 0x01029): (155, "CodeDataContainerMap"),
("read_only_space", 0x01071): (135, "FixedDoubleArrayMap"),
("read_only_space", 0x010b9): (121, "GlobalDictionaryMap"),
("read_only_space", 0x01101): (93, "ManyClosuresCellMap"),
("read_only_space", 0x01149): (118, "ModuleInfoMap"),
("read_only_space", 0x01191): (122, "NameDictionaryMap"),
("read_only_space", 0x011d9): (93, "NoClosuresCellMap"),
("read_only_space", 0x01221): (123, "NumberDictionaryMap"),
("read_only_space", 0x01269): (93, "OneClosureCellMap"),
("read_only_space", 0x012b1): (124, "OrderedHashMapMap"),
("read_only_space", 0x012f9): (125, "OrderedHashSetMap"),
("read_only_space", 0x01341): (126, "OrderedNameDictionaryMap"),
("read_only_space", 0x01389): (163, "PreparseDataMap"),
("read_only_space", 0x013d1): (164, "PropertyArrayMap"),
("read_only_space", 0x01419): (89, "SideEffectCallHandlerInfoMap"),
("read_only_space", 0x01461): (89, "SideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x014a9): (89, "NextCallSideEffectFreeCallHandlerInfoMap"),
("read_only_space", 0x014f1): (127, "SimpleNumberDictionaryMap"),
("read_only_space", 0x01539): (118, "SloppyArgumentsElementsMap"),
("read_only_space", 0x01581): (146, "SmallOrderedHashMapMap"),
("read_only_space", 0x015c9): (147, "SmallOrderedHashSetMap"),
("read_only_space", 0x01611): (148, "SmallOrderedNameDictionaryMap"),
("read_only_space", 0x01659): (68, "SourceTextModuleMap"),
("read_only_space", 0x016a1): (128, "StringTableMap"),
("read_only_space", 0x016e9): (69, "SyntheticModuleMap"),
("read_only_space", 0x01731): (150, "UncompiledDataWithoutPreparseDataMap"),
("read_only_space", 0x01779): (149, "UncompiledDataWithPreparseDataMap"),
("read_only_space", 0x017c1): (167, "WeakArrayListMap"),
("read_only_space", 0x01809): (120, "EphemeronHashTableMap"),
("read_only_space", 0x01851): (157, "EmbedderDataArrayMap"),
("read_only_space", 0x01899): (168, "WeakCellMap"),
("read_only_space", 0x018e1): (32, "StringMap"),
("read_only_space", 0x01929): (41, "ConsOneByteStringMap"),
("read_only_space", 0x01971): (33, "ConsStringMap"),
("read_only_space", 0x019b9): (37, "ThinStringMap"),
("read_only_space", 0x01a01): (35, "SlicedStringMap"),
("read_only_space", 0x01a49): (43, "SlicedOneByteStringMap"),
("read_only_space", 0x01a91): (34, "ExternalStringMap"),
("read_only_space", 0x01ad9): (42, "ExternalOneByteStringMap"),
("read_only_space", 0x01b21): (50, "UncachedExternalStringMap"),
("read_only_space", 0x01b69): (0, "InternalizedStringMap"),
("read_only_space", 0x01bb1): (2, "ExternalInternalizedStringMap"),
("read_only_space", 0x01bf9): (10, "ExternalOneByteInternalizedStringMap"),
("read_only_space", 0x01c41): (18, "UncachedExternalInternalizedStringMap"),
("read_only_space", 0x01c89): (26, "UncachedExternalOneByteInternalizedStringMap"),
("read_only_space", 0x01cd1): (58, "UncachedExternalOneByteStringMap"),
("read_only_space", 0x01d19): (67, "SelfReferenceMarkerMap"),
("read_only_space", 0x01d79): (92, "EnumCacheMap"),
("read_only_space", 0x01e11): (86, "ArrayBoilerplateDescriptionMap"),
("read_only_space", 0x01ff9): (95, "InterceptorInfoMap"),
("read_only_space", 0x04969): (71, "PromiseFulfillReactionJobTaskMap"),
("read_only_space", 0x049b1): (72, "PromiseRejectReactionJobTaskMap"),
("read_only_space", 0x049f9): (73, "CallableTaskMap"),
("read_only_space", 0x04a41): (74, "CallbackTaskMap"),
("read_only_space", 0x04a89): (75, "PromiseResolveThenableJobTaskMap"),
("read_only_space", 0x04ad1): (78, "FunctionTemplateInfoMap"),
("read_only_space", 0x04b19): (79, "ObjectTemplateInfoMap"),
("read_only_space", 0x04b61): (80, "AccessCheckInfoMap"),
("read_only_space", 0x04ba9): (81, "AccessorInfoMap"),
("read_only_space", 0x04bf1): (82, "AccessorPairMap"),
("read_only_space", 0x04c39): (83, "AliasedArgumentsEntryMap"),
("read_only_space", 0x04c81): (84, "AllocationMementoMap"),
("read_only_space", 0x04cc9): (87, "AsmWasmDataMap"),
("read_only_space", 0x04d11): (88, "AsyncGeneratorRequestMap"),
("read_only_space", 0x04d59): (90, "ClassPositionsMap"),
("read_only_space", 0x04da1): (91, "DebugInfoMap"),
("read_only_space", 0x04de9): (94, "FunctionTemplateRareDataMap"),
("read_only_space", 0x04e31): (97, "InterpreterDataMap"),
("read_only_space", 0x04e79): (98, "PromiseCapabilityMap"),
("read_only_space", 0x04ec1): (99, "PromiseReactionMap"),
("read_only_space", 0x04f09): (100, "PrototypeInfoMap"),
("read_only_space", 0x04f51): (101, "ScriptMap"),
("read_only_space", 0x04f99): (105, "SourcePositionTableWithFrameCacheMap"),
("read_only_space", 0x04fe1): (106, "SourceTextModuleInfoEntryMap"),
("read_only_space", 0x05029): (107, "StackFrameInfoMap"),
("read_only_space", 0x05071): (108, "StackTraceFrameMap"),
("read_only_space", 0x050b9): (109, "TemplateObjectDescriptionMap"),
("read_only_space", 0x05101): (110, "Tuple2Map"),
("read_only_space", 0x05149): (111, "Tuple3Map"),
("read_only_space", 0x05191): (112, "WasmCapiFunctionDataMap"),
("read_only_space", 0x051d9): (113, "WasmDebugInfoMap"),
("read_only_space", 0x05221): (114, "WasmExceptionTagMap"),
("read_only_space", 0x05269): (115, "WasmExportedFunctionDataMap"),
("read_only_space", 0x052b1): (116, "WasmIndirectFunctionTableMap"),
("read_only_space", 0x052f9): (117, "WasmJSFunctionDataMap"),
("read_only_space", 0x05341): (96, "InternalClassMap"),
("read_only_space", 0x05389): (103, "SmiPairMap"),
("read_only_space", 0x053d1): (102, "SmiBoxMap"),
("read_only_space", 0x05419): (104, "SortStateMap"),
("read_only_space", 0x05461): (85, "AllocationSiteWithWeakNextMap"),
("read_only_space", 0x054a9): (85, "AllocationSiteWithoutWeakNextMap"),
("read_only_space", 0x054f1): (76, "LoadHandler1Map"),
("read_only_space", 0x05539): (76, "LoadHandler2Map"),
("read_only_space", 0x05581): (76, "LoadHandler3Map"),
("read_only_space", 0x055c9): (77, "StoreHandler0Map"),
("read_only_space", 0x05611): (77, "StoreHandler1Map"),
("read_only_space", 0x05659): (77, "StoreHandler2Map"),
("read_only_space", 0x056a1): (77, "StoreHandler3Map"),
("map_space", 0x00119): (1057, "ExternalMap"),
("map_space", 0x00161): (1072, "JSMessageObjectMap"),
}
# List of known V8 objects.
KNOWN_OBJECTS = {
("read_only_space", 0x001b1): "NullValue",
("read_only_space", 0x00229): "EmptyDescriptorArray",
("read_only_space", 0x00289): "EmptyWeakFixedArray",
("read_only_space", 0x00371): "UninitializedValue",
("read_only_space", 0x00471): "UndefinedValue",
("read_only_space", 0x004e9): "NanValue",
("read_only_space", 0x00541): "TheHoleValue",
("read_only_space", 0x005d1): "HoleNanValue",
("read_only_space", 0x005e1): "TrueValue",
("read_only_space", 0x00689): "FalseValue",
("read_only_space", 0x006d1): "empty_string",
("read_only_space", 0x00b19): "EmptyScopeInfo",
("read_only_space", 0x00b29): "EmptyFixedArray",
("read_only_space", 0x00b39): "ArgumentsMarker",
("read_only_space", 0x00bd1): "Exception",
("read_only_space", 0x00c69): "TerminationException",
("read_only_space", 0x00d09): "OptimizedOut",
("read_only_space", 0x00da1): "StaleRegister",
("read_only_space", 0x01d69): "EmptyEnumCache",
("read_only_space", 0x01dc9): "EmptyPropertyArray",
("read_only_space", 0x01dd9): "EmptyByteArray",
("read_only_space", 0x01de9): "EmptyObjectBoilerplateDescription",
("read_only_space", 0x01e01): "EmptyArrayBoilerplateDescription",
("read_only_space", 0x01e61): "EmptyClosureFeedbackCellArray",
("read_only_space", 0x01e71): "EmptySloppyArgumentsElements",
("read_only_space", 0x01e91): "EmptySlowElementDictionary",
("read_only_space", 0x01ed9): "EmptyOrderedHashMap",
("read_only_space", 0x01f01): "EmptyOrderedHashSet",
("read_only_space", 0x01f29): "EmptyFeedbackMetadata",
("read_only_space", 0x01f39): "EmptyPropertyCell",
("read_only_space", 0x01f61): "EmptyPropertyDictionary",
("read_only_space", 0x01fb1): "NoOpInterceptorInfo",
("read_only_space", 0x02049): "EmptyWeakArrayList",
("read_only_space", 0x02061): "InfinityValue",
("read_only_space", 0x02071): "MinusZeroValue",
("read_only_space", 0x02081): "MinusInfinityValue",
("read_only_space", 0x02091): "SelfReferenceMarker",
("read_only_space", 0x020e9): "OffHeapTrampolineRelocationInfo",
("read_only_space", 0x02101): "TrampolineTrivialCodeDataContainer",
("read_only_space", 0x02119): "TrampolinePromiseRejectionCodeDataContainer",
("read_only_space", 0x02131): "GlobalThisBindingScopeInfo",
("read_only_space", 0x02199): "EmptyFunctionScopeInfo",
("read_only_space", 0x021e9): "NativeScopeInfo",
("read_only_space", 0x02221): "HashSeed",
("old_space", 0x00121): "ArgumentsIteratorAccessor",
("old_space", 0x00191): "ArrayLengthAccessor",
("old_space", 0x00201): "BoundFunctionLengthAccessor",
("old_space", 0x00271): "BoundFunctionNameAccessor",
("old_space", 0x002e1): "ErrorStackAccessor",
("old_space", 0x00351): "FunctionArgumentsAccessor",
("old_space", 0x003c1): "FunctionCallerAccessor",
("old_space", 0x00431): "FunctionNameAccessor",
("old_space", 0x004a1): "FunctionLengthAccessor",
("old_space", 0x00511): "FunctionPrototypeAccessor",
("old_space", 0x00581): "RegExpResultIndicesAccessor",
("old_space", 0x005f1): "StringLengthAccessor",
("old_space", 0x00661): "InvalidPrototypeValidityCell",
("old_space", 0x00671): "EmptyScript",
("old_space", 0x006f1): "ManyClosuresCell",
("old_space", 0x00709): "ArrayConstructorProtector",
("old_space", 0x00731): "NoElementsProtector",
("old_space", 0x00759): "IsConcatSpreadableProtector",
("old_space", 0x00781): "ArraySpeciesProtector",
("old_space", 0x007a9): "TypedArraySpeciesProtector",
("old_space", 0x007d1): "PromiseSpeciesProtector",
("old_space", 0x007f9): "StringLengthProtector",
("old_space", 0x00821): "ArrayIteratorProtector",
("old_space", 0x00849): "ArrayBufferDetachingProtector",
("old_space", 0x00871): "PromiseHookProtector",
("old_space", 0x00899): "PromiseResolveProtector",
("old_space", 0x008c1): "MapIteratorProtector",
("old_space", 0x008e9): "PromiseThenProtector",
("old_space", 0x00911): "SetIteratorProtector",
("old_space", 0x00939): "StringIteratorProtector",
("old_space", 0x00961): "SingleCharacterStringCache",
("old_space", 0x01171): "StringSplitCache",
("old_space", 0x01981): "RegExpMultipleCache",
("old_space", 0x02191): "BuiltinsConstantsTable",
("read_only_space", 0x001a9): "NullValue",
("read_only_space", 0x00221): "EmptyDescriptorArray",
("read_only_space", 0x00281): "EmptyWeakFixedArray",
("read_only_space", 0x00369): "UninitializedValue",
("read_only_space", 0x00469): "UndefinedValue",
("read_only_space", 0x004e1): "NanValue",
("read_only_space", 0x00539): "TheHoleValue",
("read_only_space", 0x005c9): "HoleNanValue",
("read_only_space", 0x005d9): "TrueValue",
("read_only_space", 0x00681): "FalseValue",
("read_only_space", 0x006c9): "empty_string",
("read_only_space", 0x00b11): "EmptyScopeInfo",
("read_only_space", 0x00b21): "EmptyFixedArray",
("read_only_space", 0x00b31): "ArgumentsMarker",
("read_only_space", 0x00bc9): "Exception",
("read_only_space", 0x00c61): "TerminationException",
("read_only_space", 0x00d01): "OptimizedOut",
("read_only_space", 0x00d99): "StaleRegister",
("read_only_space", 0x01d61): "EmptyEnumCache",
("read_only_space", 0x01dc1): "EmptyPropertyArray",
("read_only_space", 0x01dd1): "EmptyByteArray",
("read_only_space", 0x01de1): "EmptyObjectBoilerplateDescription",
("read_only_space", 0x01df9): "EmptyArrayBoilerplateDescription",
("read_only_space", 0x01e59): "EmptyClosureFeedbackCellArray",
("read_only_space", 0x01e69): "EmptySloppyArgumentsElements",
("read_only_space", 0x01e89): "EmptySlowElementDictionary",
("read_only_space", 0x01ed1): "EmptyOrderedHashMap",
("read_only_space", 0x01ef9): "EmptyOrderedHashSet",
("read_only_space", 0x01f21): "EmptyFeedbackMetadata",
("read_only_space", 0x01f31): "EmptyPropertyCell",
("read_only_space", 0x01f59): "EmptyPropertyDictionary",
("read_only_space", 0x01fa9): "NoOpInterceptorInfo",
("read_only_space", 0x02041): "EmptyWeakArrayList",
("read_only_space", 0x02059): "InfinityValue",
("read_only_space", 0x02069): "MinusZeroValue",
("read_only_space", 0x02079): "MinusInfinityValue",
("read_only_space", 0x02089): "SelfReferenceMarker",
("read_only_space", 0x020e1): "OffHeapTrampolineRelocationInfo",
("read_only_space", 0x020f9): "TrampolineTrivialCodeDataContainer",
("read_only_space", 0x02111): "TrampolinePromiseRejectionCodeDataContainer",
("read_only_space", 0x02129): "GlobalThisBindingScopeInfo",
("read_only_space", 0x02191): "EmptyFunctionScopeInfo",
("read_only_space", 0x021e1): "NativeScopeInfo",
("read_only_space", 0x02219): "HashSeed",
("old_space", 0x00119): "ArgumentsIteratorAccessor",
("old_space", 0x00189): "ArrayLengthAccessor",
("old_space", 0x001f9): "BoundFunctionLengthAccessor",
("old_space", 0x00269): "BoundFunctionNameAccessor",
("old_space", 0x002d9): "ErrorStackAccessor",
("old_space", 0x00349): "FunctionArgumentsAccessor",
("old_space", 0x003b9): "FunctionCallerAccessor",
("old_space", 0x00429): "FunctionNameAccessor",
("old_space", 0x00499): "FunctionLengthAccessor",
("old_space", 0x00509): "FunctionPrototypeAccessor",
("old_space", 0x00579): "RegExpResultIndicesAccessor",
("old_space", 0x005e9): "StringLengthAccessor",
("old_space", 0x00659): "InvalidPrototypeValidityCell",
("old_space", 0x00669): "EmptyScript",
("old_space", 0x006e9): "ManyClosuresCell",
("old_space", 0x00701): "ArrayConstructorProtector",
("old_space", 0x00729): "NoElementsProtector",
("old_space", 0x00751): "IsConcatSpreadableProtector",
("old_space", 0x00779): "ArraySpeciesProtector",
("old_space", 0x007a1): "TypedArraySpeciesProtector",
("old_space", 0x007c9): "PromiseSpeciesProtector",
("old_space", 0x007f1): "StringLengthProtector",
("old_space", 0x00819): "ArrayIteratorProtector",
("old_space", 0x00841): "ArrayBufferDetachingProtector",
("old_space", 0x00869): "PromiseHookProtector",
("old_space", 0x00891): "PromiseResolveProtector",
("old_space", 0x008b9): "MapIteratorProtector",
("old_space", 0x008e1): "PromiseThenProtector",
("old_space", 0x00909): "SetIteratorProtector",
("old_space", 0x00931): "StringIteratorProtector",
("old_space", 0x00959): "SingleCharacterStringCache",
("old_space", 0x01169): "StringSplitCache",
("old_space", 0x01979): "RegExpMultipleCache",
("old_space", 0x02189): "BuiltinsConstantsTable",
}
# List of known V8 Frame Markers.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment