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