v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
ephemeron-remembered-set.h
Go to the documentation of this file.
1
// Copyright 2023 the V8 project authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#ifndef V8_HEAP_EPHEMERON_REMEMBERED_SET_H_
6
#define V8_HEAP_EPHEMERON_REMEMBERED_SET_H_
7
8
#include <unordered_map>
9
#include <unordered_set>
10
11
#include "
src/base/platform/mutex.h
"
12
#include "
src/heap/base/worklist.h
"
13
#include "
src/objects/hash-table.h
"
14
15
namespace
v8::internal
{
16
17
// Stores ephemeron entries where the EphemeronHashTable is in old-space,
18
// and the key of the entry is in new-space. Such keys do not appear in the
19
// usual OLD_TO_NEW remembered set. The remembered set is used to avoid
20
// strongifying keys in such hash tables in young generation garbage
21
// collections.
22
class
EphemeronRememberedSet
final {
23
public
:
24
static
constexpr
int
kEphemeronTableListSegmentSize
= 128;
25
using
TableList
=
::heap::base::Worklist<Tagged<EphemeronHashTable>
,
26
kEphemeronTableListSegmentSize
>;
27
28
using
IndicesSet
= std::unordered_set<int>;
29
using
TableMap
= std::unordered_map<Tagged<EphemeronHashTable>,
IndicesSet
,
30
Object::Hasher
>;
31
32
void
RecordEphemeronKeyWrite
(
Tagged<EphemeronHashTable>
table,
33
Address
key_slot);
34
void
RecordEphemeronKeyWrites
(
Tagged<EphemeronHashTable>
table,
35
IndicesSet
indices);
36
37
TableMap
*
tables
() {
return
&
tables_
; }
38
39
private
:
40
base::Mutex
insertion_mutex_
;
41
TableMap
tables_
;
42
};
43
44
}
// namespace v8::internal
45
46
#endif
// V8_HEAP_EPHEMERON_REMEMBERED_SET_H_
heap::base::Worklist
Definition
worklist.h:57
v8::base::Mutex
Definition
mutex.h:36
v8::internal::EphemeronRememberedSet
Definition
ephemeron-remembered-set.h:22
v8::internal::EphemeronRememberedSet::tables_
TableMap tables_
Definition
ephemeron-remembered-set.h:41
v8::internal::EphemeronRememberedSet::TableMap
std::unordered_map< Tagged< EphemeronHashTable >, IndicesSet, Object::Hasher > TableMap
Definition
ephemeron-remembered-set.h:29
v8::internal::EphemeronRememberedSet::RecordEphemeronKeyWrite
void RecordEphemeronKeyWrite(Tagged< EphemeronHashTable > table, Address key_slot)
Definition
ephemeron-remembered-set.cc:12
v8::internal::EphemeronRememberedSet::kEphemeronTableListSegmentSize
static constexpr int kEphemeronTableListSegmentSize
Definition
ephemeron-remembered-set.h:24
v8::internal::EphemeronRememberedSet::IndicesSet
std::unordered_set< int > IndicesSet
Definition
ephemeron-remembered-set.h:28
v8::internal::EphemeronRememberedSet::tables
TableMap * tables()
Definition
ephemeron-remembered-set.h:37
v8::internal::EphemeronRememberedSet::insertion_mutex_
base::Mutex insertion_mutex_
Definition
ephemeron-remembered-set.h:40
v8::internal::EphemeronRememberedSet::RecordEphemeronKeyWrites
void RecordEphemeronKeyWrites(Tagged< EphemeronHashTable > table, IndicesSet indices)
Definition
ephemeron-remembered-set.cc:22
v8::internal::Tagged
Definition
waiter-queue-node.h:21
hash-table.h
mutex.h
v8::internal
Definition
api-arguments-inl.h:20
v8::internal::Address
Address
Definition
api-callbacks-inl.h:36
v8::internal::Object::Hasher
Definition
objects.h:507
worklist.h
src
heap
ephemeron-remembered-set.h
Generated on Sun Apr 6 2025 21:08:54 for v8 by
1.12.0