2424#ifndef SHARE_GC_Z_ZRELOCATIONSETSELECTOR_INLINE_HPP
2525#define SHARE_GC_Z_ZRELOCATIONSETSELECTOR_INLINE_HPP
2626
27+ #include " gc/z/zArray.inline.hpp"
28+ #include " gc/z/zPage.inline.hpp"
2729#include " gc/z/zRelocationSetSelector.hpp"
2830
2931inline size_t ZRelocationSetSelectorGroupStats::npages () const {
@@ -66,6 +68,31 @@ inline const ZRelocationSetSelectorGroupStats& ZRelocationSetSelectorStats::larg
6668 return _large;
6769}
6870
71+ inline void ZRelocationSetSelectorGroup::register_live_page (ZPage* page) {
72+ const uint8_t type = page->type ();
73+ const size_t size = page->size ();
74+ const size_t live = page->live_bytes ();
75+ const size_t garbage = size - live;
76+
77+ if (garbage > _fragmentation_limit) {
78+ _registered_pages.append (page);
79+ }
80+
81+ _stats._npages ++;
82+ _stats._total += size;
83+ _stats._live += live;
84+ _stats._garbage += garbage;
85+ }
86+
87+ inline void ZRelocationSetSelectorGroup::register_garbage_page (ZPage* page) {
88+ const size_t size = page->size ();
89+
90+ _stats._npages ++;
91+ _stats._total += size;
92+ _stats._garbage += size;
93+ _stats._empty += size;
94+ }
95+
6996inline const ZArray<ZPage*>* ZRelocationSetSelectorGroup::selected () const {
7097 return &_registered_pages;
7198}
@@ -78,6 +105,44 @@ inline const ZRelocationSetSelectorGroupStats& ZRelocationSetSelectorGroup::stat
78105 return _stats;
79106}
80107
108+ inline void ZRelocationSetSelector::register_live_page (ZPage* page) {
109+ const uint8_t type = page->type ();
110+
111+ if (type == ZPageTypeSmall) {
112+ _small.register_live_page (page);
113+ } else if (type == ZPageTypeMedium) {
114+ _medium.register_live_page (page);
115+ } else {
116+ _large.register_live_page (page);
117+ }
118+ }
119+
120+ inline void ZRelocationSetSelector::register_garbage_page (ZPage* page) {
121+ const uint8_t type = page->type ();
122+
123+ if (type == ZPageTypeSmall) {
124+ _small.register_garbage_page (page);
125+ } else if (type == ZPageTypeMedium) {
126+ _medium.register_garbage_page (page);
127+ } else {
128+ _large.register_garbage_page (page);
129+ }
130+
131+ _garbage_pages.append (page);
132+ }
133+
134+ inline bool ZRelocationSetSelector::should_free_garbage_pages (int bulk) const {
135+ return _garbage_pages.length () >= bulk && _garbage_pages.is_nonempty ();
136+ }
137+
138+ inline const ZArray<ZPage*>* ZRelocationSetSelector::garbage_pages () const {
139+ return &_garbage_pages;
140+ }
141+
142+ inline void ZRelocationSetSelector::clear_garbage_pages () {
143+ return _garbage_pages.clear ();
144+ }
145+
81146inline size_t ZRelocationSetSelector::total () const {
82147 return _small.stats ().total () + _medium.stats ().total () + _large.stats ().total ();
83148}
0 commit comments