193 _instantiated_method_type == other._instantiated_method_type;
194 }
195
196 #ifndef PRODUCT
197 void print_on(outputStream* st) const;
198 #endif
199 };
200
201 class DumpTimeLambdaProxyClassInfo {
202 public:
203 GrowableArray<InstanceKlass*>* _proxy_klasses;
204 DumpTimeLambdaProxyClassInfo() : _proxy_klasses(nullptr) {}
205 DumpTimeLambdaProxyClassInfo& operator=(const DumpTimeLambdaProxyClassInfo&) = delete;
206 ~DumpTimeLambdaProxyClassInfo();
207
208 void add_proxy_klass(InstanceKlass* proxy_klass) {
209 if (_proxy_klasses == nullptr) {
210 _proxy_klasses = new (mtClassShared) GrowableArray<InstanceKlass*>(5, mtClassShared);
211 }
212 assert(_proxy_klasses != nullptr, "sanity");
213 _proxy_klasses->append(proxy_klass);
214 }
215
216 void metaspace_pointers_do(MetaspaceClosure* it) {
217 for (int i=0; i<_proxy_klasses->length(); i++) {
218 it->push(_proxy_klasses->adr_at(i));
219 }
220 }
221 };
222
223 class RunTimeLambdaProxyClassInfo {
224 RunTimeLambdaProxyClassKey _key;
225 InstanceKlass* _proxy_klass_head;
226 public:
227 RunTimeLambdaProxyClassInfo(RunTimeLambdaProxyClassKey key, InstanceKlass* proxy_klass_head) :
228 _key(key), _proxy_klass_head(proxy_klass_head) {}
229
230 InstanceKlass* proxy_klass_head() const { return _proxy_klass_head; }
231
232 // Used by LambdaProxyClassDictionary to implement OffsetCompactHashtable::EQUALS
233 static inline bool EQUALS(
|
193 _instantiated_method_type == other._instantiated_method_type;
194 }
195
196 #ifndef PRODUCT
197 void print_on(outputStream* st) const;
198 #endif
199 };
200
201 class DumpTimeLambdaProxyClassInfo {
202 public:
203 GrowableArray<InstanceKlass*>* _proxy_klasses;
204 DumpTimeLambdaProxyClassInfo() : _proxy_klasses(nullptr) {}
205 DumpTimeLambdaProxyClassInfo& operator=(const DumpTimeLambdaProxyClassInfo&) = delete;
206 ~DumpTimeLambdaProxyClassInfo();
207
208 void add_proxy_klass(InstanceKlass* proxy_klass) {
209 if (_proxy_klasses == nullptr) {
210 _proxy_klasses = new (mtClassShared) GrowableArray<InstanceKlass*>(5, mtClassShared);
211 }
212 assert(_proxy_klasses != nullptr, "sanity");
213 // Try to preserve the order. get_shared_lambda_proxy_class returns shared classes in reverse order.
214 _proxy_klasses->insert_before(0, proxy_klass);
215 }
216
217 void metaspace_pointers_do(MetaspaceClosure* it) {
218 for (int i=0; i<_proxy_klasses->length(); i++) {
219 it->push(_proxy_klasses->adr_at(i));
220 }
221 }
222 };
223
224 class RunTimeLambdaProxyClassInfo {
225 RunTimeLambdaProxyClassKey _key;
226 InstanceKlass* _proxy_klass_head;
227 public:
228 RunTimeLambdaProxyClassInfo(RunTimeLambdaProxyClassKey key, InstanceKlass* proxy_klass_head) :
229 _key(key), _proxy_klass_head(proxy_klass_head) {}
230
231 InstanceKlass* proxy_klass_head() const { return _proxy_klass_head; }
232
233 // Used by LambdaProxyClassDictionary to implement OffsetCompactHashtable::EQUALS
234 static inline bool EQUALS(
|