// Copyright 2020 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_HEAP_PAGED_SPACES_H_ #define V8_HEAP_PAGED_SPACES_H_ #include <atomic> #include <limits> #include <memory> #include <optional> #include <utility> #include <variant> #include "src/base/bounds.h" #include "src/base/macros.h" #include "src/base/platform/mutex.h" #include "src/common/globals.h" #include "src/flags/flags.h" #include "src/heap/allocation-observer.h" #include "src/heap/allocation-stats.h" #include "src/heap/heap-verifier.h" #include "src/heap/heap.h" #include "src/heap/memory-chunk-layout.h" #include "src/heap/mutable-page-metadata.h" #include "src/heap/spaces.h" namespace v8 { namespace internal { class CompactionSpace; class Heap; class HeapObject; class Isolate; class ObjectVisitor; class PagedSpaceBase; class Sweeper; class HeapObjectRange final { … }; // Heap object iterator in paged spaces. // // A PagedSpaceObjectIterator iterates objects from the bottom of the given // space to its top or from the bottom of the given page to its top. // // If objects are allocated in the page during iteration the iterator may // or may not iterate over those objects. The caller must create a new // iterator in order to be sure to visit these new objects. class V8_EXPORT_PRIVATE PagedSpaceObjectIterator : public ObjectIterator { … }; class V8_EXPORT_PRIVATE PagedSpaceBase : NON_EXPORTED_BASE(public SpaceWithLinearArea) { … }; class V8_EXPORT_PRIVATE PagedSpace : public PagedSpaceBase { … }; // ----------------------------------------------------------------------------- // Compaction space that is used temporarily during compaction. class V8_EXPORT_PRIVATE CompactionSpace final : public PagedSpace { … }; // A collection of |CompactionSpace|s used by a single compaction task. class CompactionSpaceCollection : public Malloced { … }; // ----------------------------------------------------------------------------- // Old generation regular object space. class V8_EXPORT_PRIVATE OldSpace : public PagedSpace { … }; // ----------------------------------------------------------------------------- // StickySpace is a paged space that contain mixed young and old objects. Note // that its identity type is OLD_SPACE. class V8_EXPORT_PRIVATE StickySpace final : public OldSpace { … }; // ----------------------------------------------------------------------------- // Old generation code object space. class CodeSpace final : public PagedSpace { … }; // ----------------------------------------------------------------------------- // Shared space regular object space. class SharedSpace final : public PagedSpace { … }; // ----------------------------------------------------------------------------- // Trusted space. // Essentially another old space that, when the sandbox is enabled, will be // located outside of the sandbox. As such an attacker cannot corrupt objects // located in this space and therefore these objects can be considered trusted. class TrustedSpace final : public PagedSpace { … }; class SharedTrustedSpace final : public PagedSpace { … }; // Iterates over the chunks (pages and large object pages) that can contain // pointers to new space or to evacuation candidates. class OldGenerationMemoryChunkIterator { … }; } // namespace internal } // namespace v8 #endif // V8_HEAP_PAGED_SPACES_H_