< prev index next >

src/hotspot/share/oops/instanceKlass.hpp

Print this page

        

@@ -237,16 +237,17 @@
                                                          // code source was found to be matching the value recorded by AOT.
     _misc_is_scratch_class                    = 1 << 11, // class is the redefined scratch class
     _misc_is_shared_boot_class                = 1 << 12, // defining class loader is boot class loader
     _misc_is_shared_platform_class            = 1 << 13, // defining class loader is platform class loader
     _misc_is_shared_app_class                 = 1 << 14, // defining class loader is app class loader
-    _misc_has_resolved_methods                = 1 << 15  // resolved methods table entries added for this class
+    _misc_has_resolved_methods                = 1 << 15, // resolved methods table entries added for this class
+    _misc_is_nonfindable                      = 1 << 16  // is a non findable class, not stored in the SystemDictionary.
   };
   u2 loader_type_bits() {
     return _misc_is_shared_boot_class|_misc_is_shared_platform_class|_misc_is_shared_app_class;
   }
-  u2              _misc_flags;
+  u4              _misc_flags;
   u2              _minor_version;        // minor version number of class file
   u2              _major_version;        // major version number of class file
   Thread*         _init_thread;          // Pointer to current thread doing initialization (to handle recusive initialization)
   OopMapCache*    volatile _oop_map_cache;   // OopMapCache for all methods in the klass (allocated lazily)
   JNIid*          _jni_ids;              // First JNI identifier for static fields in this class

@@ -443,10 +444,12 @@
   void set_nest_members(Array<u2>* m) { _nest_members = m; }
 
   // nest-host index
   jushort nest_host_index() const { return _nest_host_index; }
   void set_nest_host_index(u2 i)  { _nest_host_index = i; }
+  // dynamic nest member support
+  void set_nest_host(InstanceKlass* host, TRAPS);
 
 private:
   // Called to verify that k is a member of this nest - does not look at k's nest-host
   bool has_nest_member(InstanceKlass* k, TRAPS) const;
 public:

@@ -662,10 +665,21 @@
     } else {
       _misc_flags &= ~_misc_is_unsafe_anonymous;
     }
   }
 
+  bool is_nonfindable() const                {
+    return (_misc_flags & _misc_is_nonfindable) != 0;
+  }
+  void set_is_nonfindable(bool value)        {
+    if (value) {
+      _misc_flags |= _misc_is_nonfindable;
+    } else {
+      _misc_flags &= ~_misc_is_nonfindable;
+    }
+  }
+
   bool is_contended() const                {
     return (_misc_flags & _misc_is_contended) != 0;
   }
   void set_is_contended(bool value)        {
     if (value) {

@@ -753,12 +767,12 @@
       _misc_flags &= ~_misc_has_passed_fingerprint_check;
     }
   }
   bool supers_have_passed_fingerprint_checks();
 
-  static bool should_store_fingerprint(bool is_unsafe_anonymous);
-  bool should_store_fingerprint() const { return should_store_fingerprint(is_unsafe_anonymous()); }
+  static bool should_store_fingerprint(bool is_nonfindable);
+  bool should_store_fingerprint() const { return should_store_fingerprint(is_nonfindable() || is_unsafe_anonymous()); }
   bool has_stored_fingerprint() const;
   uint64_t get_stored_fingerprint() const;
   void store_fingerprint(uint64_t fingerprint);
 
   bool is_scratch_class() const {

@@ -1027,24 +1041,24 @@
   // Sizing (in words)
   static int header_size()            { return sizeof(InstanceKlass)/wordSize; }
 
   static int size(int vtable_length, int itable_length,
                   int nonstatic_oop_map_size,
-                  bool is_interface, bool is_unsafe_anonymous, bool has_stored_fingerprint) {
+                  bool is_interface, bool is_nonfindable, bool has_stored_fingerprint) {
     return align_metadata_size(header_size() +
            vtable_length +
            itable_length +
            nonstatic_oop_map_size +
            (is_interface ? (int)sizeof(Klass*)/wordSize : 0) +
-           (is_unsafe_anonymous ? (int)sizeof(Klass*)/wordSize : 0) +
+           (is_nonfindable ? (int)sizeof(Klass*)/wordSize : 0) +
            (has_stored_fingerprint ? (int)sizeof(uint64_t*)/wordSize : 0));
   }
   int size() const                    { return size(vtable_length(),
                                                itable_length(),
                                                nonstatic_oop_map_size(),
                                                is_interface(),
-                                               is_unsafe_anonymous(),
+                                               (is_nonfindable() || is_unsafe_anonymous()),
                                                has_stored_fingerprint());
   }
 #if INCLUDE_SERVICES
   virtual void collect_statistics(KlassSizeStats *sz) const;
 #endif
< prev index next >