concurrent root iterator v2 concurrent root iterator
115
116 // Page allocation
117 ZPage* alloc_page(uint8_t type, size_t size, ZAllocationFlags flags);
118 void undo_alloc_page(ZPage* page);
119 bool retain_page(ZPage* page);
120 void release_page(ZPage* page, bool reclaimed);
121
122 // Object allocation
123 uintptr_t alloc_tlab(size_t size);
124 uintptr_t alloc_object(size_t size);
125 uintptr_t alloc_object_for_relocation(size_t size);
126 void undo_alloc_object_for_relocation(uintptr_t addr, size_t size);
127 bool is_alloc_stalled() const;
128 void check_out_of_memory();
129
130 // Marking
131 bool is_object_live(uintptr_t addr) const;
132 bool is_object_strongly_live(uintptr_t addr) const;
133 template <bool finalizable, bool publish> void mark_object(uintptr_t addr);
134 void mark_start();
135 void mark();
136 void mark_flush_and_free(Thread* thread);
137 bool mark_end();
138
139 // Post-marking & Pre-relocation
140 void destroy_detached_pages();
141
142 // Relocation set
143 void select_relocation_set();
144 void prepare_relocation_set();
145 void reset_relocation_set();
146
147 // Relocation
148 bool is_relocating(uintptr_t addr) const;
149 void relocate_start();
150 uintptr_t relocate_object(uintptr_t addr);
151 uintptr_t forward_object(uintptr_t addr);
152 void relocate();
153
154 // Iteration
|
115
116 // Page allocation
117 ZPage* alloc_page(uint8_t type, size_t size, ZAllocationFlags flags);
118 void undo_alloc_page(ZPage* page);
119 bool retain_page(ZPage* page);
120 void release_page(ZPage* page, bool reclaimed);
121
122 // Object allocation
123 uintptr_t alloc_tlab(size_t size);
124 uintptr_t alloc_object(size_t size);
125 uintptr_t alloc_object_for_relocation(size_t size);
126 void undo_alloc_object_for_relocation(uintptr_t addr, size_t size);
127 bool is_alloc_stalled() const;
128 void check_out_of_memory();
129
130 // Marking
131 bool is_object_live(uintptr_t addr) const;
132 bool is_object_strongly_live(uintptr_t addr) const;
133 template <bool finalizable, bool publish> void mark_object(uintptr_t addr);
134 void mark_start();
135 void mark(bool initial);
136 void mark_flush_and_free(Thread* thread);
137 bool mark_end();
138
139 // Post-marking & Pre-relocation
140 void destroy_detached_pages();
141
142 // Relocation set
143 void select_relocation_set();
144 void prepare_relocation_set();
145 void reset_relocation_set();
146
147 // Relocation
148 bool is_relocating(uintptr_t addr) const;
149 void relocate_start();
150 uintptr_t relocate_object(uintptr_t addr);
151 uintptr_t forward_object(uintptr_t addr);
152 void relocate();
153
154 // Iteration
|