< prev index next >

src/hotspot/share/memory/metaspaceShared.cpp

Print this page

@@ -62,10 +62,11 @@
 #include "runtime/vmThread.hpp"
 #include "runtime/vm_operations.hpp"
 #include "utilities/align.hpp"
 #include "utilities/bitMap.hpp"
 #include "utilities/defaultStream.hpp"
+#include "utilities/expandableResourceHash.hpp"
 #include "utilities/hashtable.inline.hpp"
 #if INCLUDE_G1GC
 #include "gc/g1/g1CollectedHeap.hpp"
 #endif
 

@@ -1076,21 +1077,23 @@
 
 class ArchiveCompactor : AllStatic {
   static DumpAllocStats* _alloc_stats;
   static SortedSymbolClosure* _ssc;
 
+public: // <-- solaris compiler wants this
   static unsigned my_hash(const address& a) {
     return primitive_hash<address>(a);
   }
   static bool my_equals(const address& a0, const address& a1) {
     return primitive_equals<address>(a0, a1);
   }
-  typedef ResourceHashtable<
+private:
+  typedef ExpandableResourceHashtable<
       address, address,
       ArchiveCompactor::my_hash,   // solaris compiler doesn't like: primitive_hash<address>
       ArchiveCompactor::my_equals, // solaris compiler doesn't like: primitive_equals<address>
-      16384, ResourceObj::C_HEAP> RelocationTable;
+      8087, 8, ResourceObj::C_HEAP> RelocationTable;
   static RelocationTable* _new_loc_table;
 
 public:
   static void initialize() {
     _alloc_stats = new(ResourceObj::C_HEAP, mtInternal)DumpAllocStats;

@@ -1382,22 +1385,37 @@
   ClassLoaderDataGraph::loaded_classes_do(&collect_classes);
 
   tty->print_cr("Number of classes %d", _global_klass_objects->length());
   {
     int num_type_array = 0, num_obj_array = 0, num_inst = 0;
+    int num_boot = 0, num_platform = 0, num_app = 0, num_unregistered = 0;
     for (int i = 0; i < _global_klass_objects->length(); i++) {
       Klass* k = _global_klass_objects->at(i);
       if (k->is_instance_klass()) {
         num_inst ++;
+        InstanceKlass* ik = InstanceKlass::cast(k);
+        if (ik->shared_classpath_index() == UNREGISTERED_INDEX) {
+          num_unregistered ++;
+        } else if (ik->is_shared_boot_class()) {
+          num_boot ++;
+        } else if (ik->is_shared_platform_class()) {
+          num_platform ++;
+        } else if (ik->is_shared_app_class()) {
+          num_app ++;
+        }
       } else if (k->is_objArray_klass()) {
         num_obj_array ++;
       } else {
         assert(k->is_typeArray_klass(), "sanity");
         num_type_array ++;
       }
     }
     tty->print_cr("    instance classes   = %5d", num_inst);
+    tty->print_cr("       boot            = %5d", num_boot);
+    tty->print_cr("       platform        = %5d", num_platform);
+    tty->print_cr("       app             = %5d", num_app);
+    tty->print_cr("       unregistered    = %5d", num_unregistered);
     tty->print_cr("    obj array classes  = %5d", num_obj_array);
     tty->print_cr("    type array classes = %5d", num_type_array);
   }
 
   // Ensure the ConstMethods won't be modified at run-time
< prev index next >