23 */
24
25 #include "precompiled.hpp"
26 #include "classfile/classFileStream.hpp"
27 #include "classfile/classListParser.hpp"
28 #include "classfile/classLoader.hpp"
29 #include "classfile/classLoaderData.inline.hpp"
30 #include "classfile/classLoaderDataGraph.hpp"
31 #include "classfile/classLoaderExt.hpp"
32 #include "classfile/dictionary.hpp"
33 #include "classfile/javaClasses.hpp"
34 #include "classfile/symbolTable.hpp"
35 #include "classfile/systemDictionary.hpp"
36 #include "classfile/systemDictionaryShared.hpp"
37 #include "classfile/verificationType.hpp"
38 #include "classfile/vmSymbols.hpp"
39 #include "logging/log.hpp"
40 #include "memory/allocation.hpp"
41 #include "memory/archiveUtils.hpp"
42 #include "memory/filemap.hpp"
43 #include "memory/metadataFactory.hpp"
44 #include "memory/metaspaceClosure.hpp"
45 #include "memory/oopFactory.hpp"
46 #include "memory/resourceArea.hpp"
47 #include "memory/universe.hpp"
48 #include "memory/dynamicArchive.hpp"
49 #include "oops/instanceKlass.hpp"
50 #include "oops/klass.inline.hpp"
51 #include "oops/objArrayOop.inline.hpp"
52 #include "oops/oop.inline.hpp"
53 #include "oops/typeArrayOop.inline.hpp"
54 #include "runtime/handles.inline.hpp"
55 #include "runtime/java.hpp"
56 #include "runtime/javaCalls.hpp"
57 #include "runtime/mutexLocker.hpp"
58 #include "utilities/hashtable.inline.hpp"
59 #include "utilities/resourceHash.hpp"
60 #include "utilities/stringUtils.hpp"
61
62
1523 void SystemDictionaryShared::print_table_statistics(outputStream* st) {
1524 if (UseSharedSpaces) {
1525 _builtin_dictionary.print_table_statistics(st, "Builtin Shared Dictionary");
1526 _unregistered_dictionary.print_table_statistics(st, "Unregistered Shared Dictionary");
1527 if (DynamicArchive::is_mapped()) {
1528 _dynamic_builtin_dictionary.print_table_statistics(st, "Dynamic Builtin Shared Dictionary");
1529 _dynamic_unregistered_dictionary.print_table_statistics(st, "Unregistered Shared Dictionary");
1530 }
1531 }
1532 }
1533
1534 bool SystemDictionaryShared::empty_dumptime_table() {
1535 if (_dumptime_table == NULL) {
1536 return true;
1537 }
1538 _dumptime_table->update_counts();
1539 if (_dumptime_table->count_of(true) == 0 && _dumptime_table->count_of(false) == 0){
1540 return true;
1541 }
1542 return false;
1543 }
|
23 */
24
25 #include "precompiled.hpp"
26 #include "classfile/classFileStream.hpp"
27 #include "classfile/classListParser.hpp"
28 #include "classfile/classLoader.hpp"
29 #include "classfile/classLoaderData.inline.hpp"
30 #include "classfile/classLoaderDataGraph.hpp"
31 #include "classfile/classLoaderExt.hpp"
32 #include "classfile/dictionary.hpp"
33 #include "classfile/javaClasses.hpp"
34 #include "classfile/symbolTable.hpp"
35 #include "classfile/systemDictionary.hpp"
36 #include "classfile/systemDictionaryShared.hpp"
37 #include "classfile/verificationType.hpp"
38 #include "classfile/vmSymbols.hpp"
39 #include "logging/log.hpp"
40 #include "memory/allocation.hpp"
41 #include "memory/archiveUtils.hpp"
42 #include "memory/filemap.hpp"
43 #include "memory/heapShared.hpp"
44 #include "memory/metadataFactory.hpp"
45 #include "memory/metaspaceClosure.hpp"
46 #include "memory/oopFactory.hpp"
47 #include "memory/resourceArea.hpp"
48 #include "memory/universe.hpp"
49 #include "memory/dynamicArchive.hpp"
50 #include "oops/instanceKlass.hpp"
51 #include "oops/klass.inline.hpp"
52 #include "oops/objArrayOop.inline.hpp"
53 #include "oops/oop.inline.hpp"
54 #include "oops/typeArrayOop.inline.hpp"
55 #include "runtime/handles.inline.hpp"
56 #include "runtime/java.hpp"
57 #include "runtime/javaCalls.hpp"
58 #include "runtime/mutexLocker.hpp"
59 #include "utilities/hashtable.inline.hpp"
60 #include "utilities/resourceHash.hpp"
61 #include "utilities/stringUtils.hpp"
62
63
1524 void SystemDictionaryShared::print_table_statistics(outputStream* st) {
1525 if (UseSharedSpaces) {
1526 _builtin_dictionary.print_table_statistics(st, "Builtin Shared Dictionary");
1527 _unregistered_dictionary.print_table_statistics(st, "Unregistered Shared Dictionary");
1528 if (DynamicArchive::is_mapped()) {
1529 _dynamic_builtin_dictionary.print_table_statistics(st, "Dynamic Builtin Shared Dictionary");
1530 _dynamic_unregistered_dictionary.print_table_statistics(st, "Unregistered Shared Dictionary");
1531 }
1532 }
1533 }
1534
1535 bool SystemDictionaryShared::empty_dumptime_table() {
1536 if (_dumptime_table == NULL) {
1537 return true;
1538 }
1539 _dumptime_table->update_counts();
1540 if (_dumptime_table->count_of(true) == 0 && _dumptime_table->count_of(false) == 0){
1541 return true;
1542 }
1543 return false;
1544 }
1545
1546 class ArchivedMirrorPatcher {
1547 static void update(Klass* k) {
1548 if (k->has_raw_archived_mirror()) {
1549 oop m = HeapShared::materialize_archived_object(k->archived_java_mirror_raw_narrow());
1550 if (m != NULL) {
1551 java_lang_Class::update_archived_mirror_native_pointers(m);
1552 }
1553 }
1554 }
1555
1556 public:
1557 static void update_array_klasses(Klass* ak) {
1558 while (ak != NULL) {
1559 update(ak);
1560 ak = ArrayKlass::cast(ak)->higher_dimension();
1561 }
1562 }
1563
1564 void do_value(const RunTimeSharedClassInfo* info) {
1565 InstanceKlass* ik = info->_klass;
1566 update(ik);
1567 update_array_klasses(ik->array_klasses());
1568 }
1569 };
1570
1571 void SystemDictionaryShared::update_archived_mirror_native_pointers(RunTimeSharedDictionary* dict) {
1572 ArchivedMirrorPatcher patcher;
1573 dict->iterate(&patcher);
1574 }
1575
1576 void SystemDictionaryShared::update_archived_mirror_native_pointers() {
1577 if (!HeapShared::open_archive_heap_region_mapped()) {
1578 return;
1579 }
1580 if (MetaspaceShared::relocation_delta() == 0) {
1581 return;
1582 }
1583 update_archived_mirror_native_pointers(&_builtin_dictionary);
1584 update_archived_mirror_native_pointers(&_unregistered_dictionary);
1585
1586 for (int t = T_BOOLEAN; t <= T_LONG; t++) {
1587 Klass* k = Universe::typeArrayKlassObj((BasicType)t);
1588 ArchivedMirrorPatcher::update_array_klasses(k);
1589 }
1590 }
|