24
24
#ifndef SHARE_GC_Z_ZRELOCATIONSETSELECTOR_INLINE_HPP
25
25
#define SHARE_GC_Z_ZRELOCATIONSETSELECTOR_INLINE_HPP
26
26
27
+ #include " gc/z/zArray.inline.hpp"
28
+ #include " gc/z/zPage.inline.hpp"
27
29
#include " gc/z/zRelocationSetSelector.hpp"
28
30
29
31
inline size_t ZRelocationSetSelectorGroupStats::npages () const {
@@ -66,6 +68,31 @@ inline const ZRelocationSetSelectorGroupStats& ZRelocationSetSelectorStats::larg
66
68
return _large;
67
69
}
68
70
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
+
69
96
inline const ZArray<ZPage*>* ZRelocationSetSelectorGroup::selected () const {
70
97
return &_registered_pages;
71
98
}
@@ -78,6 +105,44 @@ inline const ZRelocationSetSelectorGroupStats& ZRelocationSetSelectorGroup::stat
78
105
return _stats;
79
106
}
80
107
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
+
81
146
inline size_t ZRelocationSetSelector::total () const {
82
147
return _small.stats ().total () + _medium.stats ().total () + _large.stats ().total ();
83
148
}
0 commit comments