v8  9.4.146 (node 16.13.0)
V8 is Google's open source JavaScript engine
cppgc::subtle Namespace Reference

Data Structures

class  HeapConsistency
 
class  DisallowGarbageCollectionScope
 
class  NoGarbageCollectionScope
 
class  HeapState
 
struct  ObjectSizeTrait
 
struct  ObjectSizeTrait< T, false >
 
struct  ObjectSizeTrait< T, true >
 

Typedefs

template<typename T >
using CrossThreadPersistent = internal::BasicCrossThreadPersistent< T, internal::StrongCrossThreadPersistentPolicy >
 
template<typename T >
using WeakCrossThreadPersistent = internal::BasicCrossThreadPersistent< T, internal::WeakCrossThreadPersistentPolicy >
 

Functions

template<typename T >
void FreeUnreferencedObject (HeapHandle &heap_handle, T &object)
 
template<typename T >
bool Resize (T &object, AdditionalBytes additional_bytes)
 

Typedef Documentation

◆ CrossThreadPersistent

DO NOT USE: Has known caveats, see below.

CrossThreadPersistent allows retaining objects from threads other than the thread the owning heap is operating on.

Known caveats:

  • Does not protect the heap owning an object from terminating.
  • Reaching transitively through the graph is unsupported as objects may be moved concurrently on the thread owning the object.

Definition at line 392 of file cross-thread-persistent.h.

◆ WeakCrossThreadPersistent

DO NOT USE: Has known caveats, see below.

CrossThreadPersistent allows weakly retaining objects from threads other than the thread the owning heap is operating on.

Known caveats:

  • Does not protect the heap owning an object from terminating.
  • Reaching transitively through the graph is unsupported as objects may be moved concurrently on the thread owning the object.

Definition at line 407 of file cross-thread-persistent.h.

Function Documentation

◆ FreeUnreferencedObject()

void cppgc::subtle::FreeUnreferencedObject ( HeapHandle &  heap_handle,
T &  object 
)

Informs the garbage collector that object can be immediately reclaimed. The destructor may not be invoked immediately but only on next garbage collection.

It is up to the embedder to guarantee that no other object holds a reference to object after calling FreeUnreferencedObject(). In case such a reference exists, it's use results in a use-after-free.

To aid in using the API, FreeUnreferencedObject() may be called from destructors on objects that would be reclaimed in the same garbage collection cycle.

Parameters
heap_handleThe corresponding heap.
objectReference to an object that is of type GarbageCollected and should be immediately reclaimed.

Definition at line 45 of file explicit-management.h.

References cppgc::internal::FreeUnreferencedObject().

◆ Resize()

bool cppgc::subtle::Resize ( T &  object,
AdditionalBytes  additional_bytes 
)

Tries to resize object of type T with additional bytes on top of sizeof(T). Resizing is only useful with trailing inlined storage, see e.g. MakeGarbageCollected(AllocationHandle&, AdditionalBytes).

Resize() performs growing or shrinking as needed and may skip the operation for internal reasons, see return value.

It is up to the embedder to guarantee that in case of shrinking a larger object down, the reclaimed area is not used anymore. Any subsequent use results in a use-after-free.

The object must be live when calling Resize().

Parameters
objectReference to an object that is of type GarbageCollected and should be resized.
additional_bytesBytes in addition to sizeof(T) that the object should provide.
Returns
true when the operation was successful and the result can be relied on, and false otherwise.

Definition at line 73 of file explicit-management.h.

References cppgc::internal::Resize(), and AdditionalBytes::value.