@@ -617,11 +617,10 @@ class UnregisteredClassesDuplicationChecker : StackObj {
617
617
public:
618
618
UnregisteredClassesDuplicationChecker () : _thread(Thread::current()) {}
619
619
620
- bool do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
620
+ void do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
621
621
if (!SystemDictionaryShared::is_builtin (k)) {
622
622
_list.append (k);
623
623
}
624
- return true ; // keep on iterating
625
624
}
626
625
627
626
static int compare_by_loader (InstanceKlass** a, InstanceKlass** b) {
@@ -653,29 +652,23 @@ class UnregisteredClassesDuplicationChecker : StackObj {
653
652
}
654
653
};
655
654
656
- class ExcludeDumpTimeSharedClasses : StackObj {
657
- public:
658
- bool do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
659
- SystemDictionaryShared::check_for_exclusion (k, &info);
660
- return true ; // keep on iterating
661
- }
662
- };
663
-
664
655
void SystemDictionaryShared::check_excluded_classes () {
665
656
assert (no_class_loading_should_happen (), " sanity" );
666
657
assert_lock_strong (DumpTimeTable_lock);
667
658
668
659
if (DynamicDumpSharedSpaces) {
669
660
// Do this first -- if a base class is excluded due to duplication,
670
- // all of its subclasses will also be excluded by ExcludeDumpTimeSharedClasses
661
+ // all of its subclasses will also be excluded.
671
662
ResourceMark rm;
672
663
UnregisteredClassesDuplicationChecker dup_checker;
673
- _dumptime_table->iterate (&dup_checker);
664
+ _dumptime_table->iterate_all_live_classes (&dup_checker);
674
665
dup_checker.mark_duplicated_classes ();
675
666
}
676
667
677
- ExcludeDumpTimeSharedClasses excl;
678
- _dumptime_table->iterate(&excl);
668
+ auto check_for_exclusion = [&] (InstanceKlass* k, DumpTimeClassInfo& info) {
669
+ SystemDictionaryShared::check_for_exclusion (k, &info);
670
+ };
671
+ _dumptime_table->iterate_all_live_classes (check_for_exclusion);
679
672
_dumptime_table->update_counts ();
680
673
681
674
cleanup_lambda_proxy_class_dictionary ();
@@ -725,42 +718,24 @@ bool SystemDictionaryShared::has_class_failed_verification(InstanceKlass* ik) {
725
718
return (p == NULL ) ? false : p->failed_verification ();
726
719
}
727
720
728
- class IterateDumpTimeSharedClassTable : StackObj {
729
- MetaspaceClosure *_it;
730
- public:
731
- IterateDumpTimeSharedClassTable (MetaspaceClosure* it) : _it(it) {}
721
+ void SystemDictionaryShared::dumptime_classes_do (class MetaspaceClosure * it) {
722
+ assert_lock_strong (DumpTimeTable_lock);
732
723
733
- bool do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
734
- assert_lock_strong (DumpTimeTable_lock);
724
+ auto do_klass = [&] (InstanceKlass* k, DumpTimeClassInfo& info) {
735
725
if (k->is_loader_alive () && !info.is_excluded ()) {
736
- info.metaspace_pointers_do (_it );
726
+ info.metaspace_pointers_do (it );
737
727
}
738
- return true ; // keep on iterating
739
- }
740
- };
728
+ };
729
+ _dumptime_table->iterate_all_live_classes (do_klass);
741
730
742
- class IterateDumpTimeLambdaProxyClassDictionary : StackObj {
743
- MetaspaceClosure *_it;
744
- public:
745
- IterateDumpTimeLambdaProxyClassDictionary (MetaspaceClosure* it) : _it(it) {}
746
-
747
- bool do_entry (LambdaProxyClassKey& key, DumpTimeLambdaProxyClassInfo& info) {
748
- assert_lock_strong (DumpTimeTable_lock);
749
- if (key.caller_ik ()->is_loader_alive ()) {
750
- info.metaspace_pointers_do (_it);
751
- key.metaspace_pointers_do (_it);
752
- }
753
- return true ; // keep on iterating
754
- }
755
- };
756
-
757
- void SystemDictionaryShared::dumptime_classes_do (class MetaspaceClosure * it) {
758
- assert_lock_strong (DumpTimeTable_lock);
759
- IterateDumpTimeSharedClassTable iter (it);
760
- _dumptime_table->iterate(&iter);
761
731
if (_dumptime_lambda_proxy_class_dictionary != NULL ) {
762
- IterateDumpTimeLambdaProxyClassDictionary iter_lambda (it);
763
- _dumptime_lambda_proxy_class_dictionary->iterate(&iter_lambda);
732
+ auto do_lambda = [&] (LambdaProxyClassKey& key, DumpTimeLambdaProxyClassInfo& info) {
733
+ if (key.caller_ik ()->is_loader_alive ()) {
734
+ info.metaspace_pointers_do (it);
735
+ key.metaspace_pointers_do (it);
736
+ }
737
+ };
738
+ _dumptime_lambda_proxy_class_dictionary->iterate_all (do_lambda);
764
739
}
765
740
}
766
741
@@ -1172,12 +1147,11 @@ class EstimateSizeForArchive : StackObj {
1172
1147
_num_unregistered_klasses = 0 ;
1173
1148
}
1174
1149
1175
- bool do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
1150
+ void do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
1176
1151
if (!info.is_excluded ()) {
1177
1152
size_t byte_size = info.runtime_info_bytesize ();
1178
1153
_shared_class_info_size += align_up (byte_size, SharedSpaceObjectAlignment);
1179
1154
}
1180
- return true ; // keep on iterating
1181
1155
}
1182
1156
1183
1157
size_t total () {
@@ -1187,7 +1161,7 @@ class EstimateSizeForArchive : StackObj {
1187
1161
1188
1162
size_t SystemDictionaryShared::estimate_size_for_archive () {
1189
1163
EstimateSizeForArchive est;
1190
- _dumptime_table->iterate (&est);
1164
+ _dumptime_table->iterate_all_live_classes (&est);
1191
1165
size_t total_size = est.total () +
1192
1166
CompactHashtableWriter::estimate_size (_dumptime_table->count_of (true )) +
1193
1167
CompactHashtableWriter::estimate_size (_dumptime_table->count_of (false ));
@@ -1281,7 +1255,7 @@ class CopySharedClassInfoToArchive : StackObj {
1281
1255
bool is_builtin)
1282
1256
: _writer(writer), _is_builtin(is_builtin), _builder(ArchiveBuilder::current()) {}
1283
1257
1284
- bool do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
1258
+ void do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
1285
1259
if (!info.is_excluded () && info.is_builtin () == _is_builtin) {
1286
1260
size_t byte_size = info.runtime_info_bytesize ();
1287
1261
RunTimeClassInfo* record;
@@ -1305,7 +1279,6 @@ class CopySharedClassInfoToArchive : StackObj {
1305
1279
// Save this for quick runtime lookup of InstanceKlass* -> RunTimeClassInfo*
1306
1280
RunTimeClassInfo::set_for (info._klass , record);
1307
1281
}
1308
- return true ; // keep on iterating
1309
1282
}
1310
1283
};
1311
1284
@@ -1325,7 +1298,7 @@ void SystemDictionaryShared::write_dictionary(RunTimeSharedDictionary* dictionar
1325
1298
CompactHashtableWriter writer (_dumptime_table->count_of (is_builtin), &stats);
1326
1299
CopySharedClassInfoToArchive copy (&writer, is_builtin);
1327
1300
assert_lock_strong (DumpTimeTable_lock);
1328
- _dumptime_table->iterate (©);
1301
+ _dumptime_table->iterate_all_live_classes (©);
1329
1302
writer.dump (dictionary, is_builtin ? " builtin dictionary" : " unregistered dictionary" );
1330
1303
}
1331
1304
@@ -1558,12 +1531,11 @@ class CloneDumpTimeClassTable: public StackObj {
1558
1531
assert (_table != NULL , " _dumptime_table is NULL" );
1559
1532
assert (_cloned_table != NULL , " _cloned_table is NULL" );
1560
1533
}
1561
- bool do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
1534
+ void do_entry (InstanceKlass* k, DumpTimeClassInfo& info) {
1562
1535
if (!info.is_excluded ()) {
1563
1536
bool created;
1564
1537
_cloned_table->put_if_absent (k, info.clone (), &created);
1565
1538
}
1566
- return true ; // keep on iterating
1567
1539
}
1568
1540
};
1569
1541
@@ -1596,7 +1568,7 @@ void SystemDictionaryShared::clone_dumptime_tables() {
1596
1568
assert (_cloned_dumptime_table == NULL , " _cloned_dumptime_table must be cleaned" );
1597
1569
_cloned_dumptime_table = new (ResourceObj::C_HEAP, mtClass) DumpTimeSharedClassTable;
1598
1570
CloneDumpTimeClassTable copy_classes (_dumptime_table, _cloned_dumptime_table);
1599
- _dumptime_table->iterate (©_classes);
1571
+ _dumptime_table->iterate_all_live_classes (©_classes);
1600
1572
_cloned_dumptime_table->update_counts ();
1601
1573
}
1602
1574
if (_dumptime_lambda_proxy_class_dictionary != NULL ) {
1 commit comments
openjdk-notifier[bot] commentedon Jun 3, 2022
Review
Issues