< prev index next >

src/hotspot/share/classfile/systemDictionaryShared.cpp

Print this page


  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 }
< prev index next >