hotspot/src/share/vm/runtime/vmStructs.cpp
changeset 13728 882756847a04
parent 13529 dc25e69fd16d
child 13738 d67be49a5beb
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp	Sat Sep 01 13:25:18 2012 -0400
@@ -51,48 +51,37 @@
 #include "interpreter/bytecodeInterpreter.hpp"
 #include "interpreter/bytecodes.hpp"
 #include "interpreter/interpreter.hpp"
+#include "memory/allocation.hpp"
 #include "memory/cardTableRS.hpp"
-#include "memory/compactPermGen.hpp"
 #include "memory/defNewGeneration.hpp"
 #include "memory/freeBlockDictionary.hpp"
 #include "memory/genCollectedHeap.hpp"
 #include "memory/generation.hpp"
 #include "memory/generationSpec.hpp"
 #include "memory/heap.hpp"
-#include "memory/permGen.hpp"
 #include "memory/space.hpp"
 #include "memory/tenuredGeneration.hpp"
 #include "memory/universe.hpp"
 #include "memory/watermark.hpp"
 #include "oops/arrayKlass.hpp"
-#include "oops/arrayKlassKlass.hpp"
 #include "oops/arrayOop.hpp"
-#include "oops/compiledICHolderKlass.hpp"
-#include "oops/compiledICHolderOop.hpp"
-#include "oops/constMethodKlass.hpp"
-#include "oops/constMethodOop.hpp"
-#include "oops/constantPoolKlass.hpp"
-#include "oops/constantPoolOop.hpp"
-#include "oops/cpCacheKlass.hpp"
-#include "oops/cpCacheOop.hpp"
+#include "oops/compiledICHolder.hpp"
+#include "oops/constMethod.hpp"
+#include "oops/constantPool.hpp"
+#include "oops/cpCache.hpp"
+#include "oops/instanceClassLoaderKlass.hpp"
 #include "oops/instanceKlass.hpp"
 #include "oops/instanceMirrorKlass.hpp"
-#include "oops/instanceKlassKlass.hpp"
 #include "oops/instanceOop.hpp"
 #include "oops/klass.hpp"
-#include "oops/klassOop.hpp"
 #include "oops/markOop.hpp"
-#include "oops/methodDataKlass.hpp"
-#include "oops/methodDataOop.hpp"
-#include "oops/methodKlass.hpp"
-#include "oops/methodOop.hpp"
+#include "oops/methodData.hpp"
+#include "oops/method.hpp"
 #include "oops/objArrayKlass.hpp"
-#include "oops/objArrayKlassKlass.hpp"
 #include "oops/objArrayOop.hpp"
 #include "oops/oop.inline.hpp"
 #include "oops/symbol.hpp"
 #include "oops/typeArrayKlass.hpp"
-#include "oops/typeArrayKlassKlass.hpp"
 #include "oops/typeArrayOop.hpp"
 #include "prims/jvmtiAgentThread.hpp"
 #include "runtime/arguments.hpp"
@@ -107,6 +96,7 @@
 #include "runtime/stubRoutines.hpp"
 #include "runtime/virtualspace.hpp"
 #include "runtime/vmStructs.hpp"
+#include "utilities/array.hpp"
 #include "utilities/globalDefinitions.hpp"
 #include "utilities/hashtable.hpp"
 #ifdef TARGET_ARCH_x86
@@ -167,7 +157,6 @@
 # include "vmStructs_bsd_zero.hpp"
 #endif
 #ifndef SERIALGC
-#include "gc_implementation/concurrentMarkSweep/cmsPermGen.hpp"
 #include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp"
 #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp"
 #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp"
@@ -178,7 +167,6 @@
 #include "gc_implementation/parallelScavenge/asPSYoungGen.hpp"
 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
 #include "gc_implementation/parallelScavenge/psOldGen.hpp"
-#include "gc_implementation/parallelScavenge/psPermGen.hpp"
 #include "gc_implementation/parallelScavenge/psVirtualspace.hpp"
 #include "gc_implementation/parallelScavenge/psYoungGen.hpp"
 #include "gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp"
@@ -248,9 +236,9 @@
 typedef Hashtable<Symbol*, mtSymbol>          SymbolHashtable;
 typedef HashtableEntry<Symbol*, mtClass>      SymbolHashtableEntry;
 typedef Hashtable<oop, mtSymbol>              StringHashtable;
-typedef TwoOopHashtable<klassOop, mtClass>    klassOopTwoOopHashtable;
-typedef Hashtable<klassOop, mtClass>          klassOopHashtable;
-typedef HashtableEntry<klassOop, mtClass>     klassHashtableEntry;
+typedef TwoOopHashtable<Klass*, mtClass>      KlassTwoOopHashtable;
+typedef Hashtable<Klass*, mtClass>            KlassHashtable;
+typedef HashtableEntry<Klass*, mtClass>       KlassHashtableEntry;
 typedef TwoOopHashtable<Symbol*, mtClass>     SymbolTwoOopHashtable;
 
 //--------------------------------------------------------------------------------
@@ -273,131 +261,126 @@
                    last_entry) \
                                                                                                                                      \
   /******************************************************************/                                                               \
-  /* OopDesc and Klass hierarchies (NOTE: methodDataOop incomplete) */                                                               \
+  /* OopDesc and Klass hierarchies (NOTE: MethodData* incomplete) */                                                               \
   /******************************************************************/                                                               \
                                                                                                                                      \
   volatile_nonstatic_field(oopDesc,            _mark,                                         markOop)                               \
-  volatile_nonstatic_field(oopDesc,            _metadata._klass,                              wideKlassOop)                          \
+  volatile_nonstatic_field(oopDesc,            _metadata._klass,                              Klass*)                                \
   volatile_nonstatic_field(oopDesc,            _metadata._compressed_klass,                   narrowOop)                             \
      static_field(oopDesc,                     _bs,                                           BarrierSet*)                           \
   nonstatic_field(arrayKlass,                  _dimension,                                    int)                                   \
-  volatile_nonstatic_field(arrayKlass,         _higher_dimension,                             klassOop)                              \
-  volatile_nonstatic_field(arrayKlass,         _lower_dimension,                              klassOop)                              \
+  volatile_nonstatic_field(arrayKlass,         _higher_dimension,                             Klass*)                                \
+  volatile_nonstatic_field(arrayKlass,         _lower_dimension,                              Klass*)                                \
   nonstatic_field(arrayKlass,                  _vtable_len,                                   int)                                   \
   nonstatic_field(arrayKlass,                  _alloc_size,                                   juint)                                 \
   nonstatic_field(arrayKlass,                  _component_mirror,                             oop)                                   \
-  nonstatic_field(compiledICHolderKlass,       _alloc_size,                                   juint)                                 \
-  nonstatic_field(compiledICHolderOopDesc,     _holder_method,                                methodOop)                             \
-  nonstatic_field(compiledICHolderOopDesc,     _holder_klass,                                 klassOop)                              \
-  nonstatic_field(constantPoolOopDesc,         _tags,                                         typeArrayOop)                          \
-  nonstatic_field(constantPoolOopDesc,         _cache,                                        constantPoolCacheOop)                  \
-  nonstatic_field(constantPoolOopDesc,         _pool_holder,                                  klassOop)                              \
-  nonstatic_field(constantPoolOopDesc,         _operands,                                     typeArrayOop)                          \
-  nonstatic_field(constantPoolOopDesc,         _length,                                       int)                                   \
-  nonstatic_field(constantPoolCacheOopDesc,    _length,                                       int)                                   \
-  nonstatic_field(constantPoolCacheOopDesc,    _constant_pool,                                constantPoolOop)                       \
-  nonstatic_field(instanceKlass,               _array_klasses,                                klassOop)                              \
-  nonstatic_field(instanceKlass,               _methods,                                      objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _method_ordering,                              typeArrayOop)                          \
-  nonstatic_field(instanceKlass,               _local_interfaces,                             objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _transitive_interfaces,                        objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _fields,                                       typeArrayOop)                          \
-  nonstatic_field(instanceKlass,               _java_fields_count,                            u2)                                    \
-  nonstatic_field(instanceKlass,               _constants,                                    constantPoolOop)                       \
-  nonstatic_field(instanceKlass,               _class_loader,                                 oop)                                   \
-  nonstatic_field(instanceKlass,               _protection_domain,                            oop)                                   \
-  nonstatic_field(instanceKlass,               _signers,                                      objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _source_file_name,                             Symbol*)                               \
-  nonstatic_field(instanceKlass,               _source_debug_extension,                       char*)                                 \
-  nonstatic_field(instanceKlass,               _inner_classes,                                typeArrayOop)                          \
-  nonstatic_field(instanceKlass,               _nonstatic_field_size,                         int)                                   \
-  nonstatic_field(instanceKlass,               _static_field_size,                            int)                                   \
-  nonstatic_field(instanceKlass,               _static_oop_field_count,                       u2)                                   \
-  nonstatic_field(instanceKlass,               _nonstatic_oop_map_size,                       int)                                   \
-  nonstatic_field(instanceKlass,               _is_marked_dependent,                          bool)                                  \
-  nonstatic_field(instanceKlass,               _minor_version,                                u2)                                    \
-  nonstatic_field(instanceKlass,               _major_version,                                u2)                                    \
-  nonstatic_field(instanceKlass,               _init_state,                                   u1)                                    \
-  nonstatic_field(instanceKlass,               _init_thread,                                  Thread*)                               \
-  nonstatic_field(instanceKlass,               _vtable_len,                                   int)                                   \
-  nonstatic_field(instanceKlass,               _itable_len,                                   int)                                   \
-  nonstatic_field(instanceKlass,               _reference_type,                               u1)                                    \
-  volatile_nonstatic_field(instanceKlass,      _oop_map_cache,                                OopMapCache*)                          \
-  nonstatic_field(instanceKlass,               _jni_ids,                                      JNIid*)                                \
-  nonstatic_field(instanceKlass,               _osr_nmethods_head,                            nmethod*)                              \
-  nonstatic_field(instanceKlass,               _breakpoints,                                  BreakpointInfo*)                       \
-  nonstatic_field(instanceKlass,               _generic_signature,                            Symbol*)                               \
-  nonstatic_field(instanceKlass,               _methods_jmethod_ids,                          jmethodID*)                            \
-  nonstatic_field(instanceKlass,               _methods_cached_itable_indices,                int*)                                  \
-  volatile_nonstatic_field(instanceKlass,      _idnum_allocated_count,                        u2)                                    \
-  nonstatic_field(instanceKlass,               _class_annotations,                            typeArrayOop)                          \
-  nonstatic_field(instanceKlass,               _fields_annotations,                           objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _methods_annotations,                          objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _methods_parameter_annotations,                objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _methods_default_annotations,                  objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _dependencies,                                 nmethodBucket*)                        \
+  nonstatic_field(CompiledICHolder,     _holder_method,                                Method*)                        \
+  nonstatic_field(CompiledICHolder,     _holder_klass,                                 Klass*)                                \
+  nonstatic_field(ConstantPool,         _tags,                                         Array<u1>*)                            \
+  nonstatic_field(ConstantPool,         _cache,                                        ConstantPoolCache*)             \
+  nonstatic_field(ConstantPool,         _pool_holder,                                  Klass*)                                \
+  nonstatic_field(ConstantPool,         _operands,                                     Array<u2>*)                            \
+  nonstatic_field(ConstantPool,         _length,                                       int)                                   \
+  nonstatic_field(ConstantPool,         _resolved_references,                          jobject)                               \
+  nonstatic_field(ConstantPool,         _reference_map,                                Array<u2>*)                            \
+  nonstatic_field(ConstantPoolCache,    _length,                                       int)                                   \
+  nonstatic_field(ConstantPoolCache,    _constant_pool,                                ConstantPool*)                  \
+  nonstatic_field(InstanceKlass,               _array_klasses,                                Klass*)                                \
+  nonstatic_field(InstanceKlass,               _methods,                                      Array<Method*>*)                \
+  nonstatic_field(InstanceKlass,               _local_interfaces,                             Array<Klass*>*)                        \
+  nonstatic_field(InstanceKlass,               _transitive_interfaces,                        Array<Klass*>*)                        \
+  nonstatic_field(InstanceKlass,               _fields,                                       Array<u2>*)                            \
+  nonstatic_field(InstanceKlass,               _java_fields_count,                            u2)                                    \
+  nonstatic_field(InstanceKlass,               _constants,                                    ConstantPool*)                  \
+  nonstatic_field(InstanceKlass,               _class_loader_data,                            ClassLoaderData*)                      \
+  nonstatic_field(InstanceKlass,               _protection_domain,                            oop)                                   \
+  nonstatic_field(InstanceKlass,               _signers,                                      objArrayOop)                           \
+  nonstatic_field(InstanceKlass,               _source_file_name,                             Symbol*)                               \
+  nonstatic_field(InstanceKlass,               _source_debug_extension,                       char*)                                 \
+  nonstatic_field(InstanceKlass,               _inner_classes,                               Array<jushort>*)                       \
+  nonstatic_field(InstanceKlass,               _nonstatic_field_size,                         int)                                   \
+  nonstatic_field(InstanceKlass,               _static_field_size,                            int)                                   \
+  nonstatic_field(InstanceKlass,               _static_oop_field_count,                       u2)                                   \
+  nonstatic_field(InstanceKlass,               _nonstatic_oop_map_size,                       int)                                   \
+  nonstatic_field(InstanceKlass,               _is_marked_dependent,                          bool)                                  \
+  nonstatic_field(InstanceKlass,               _minor_version,                                u2)                                    \
+  nonstatic_field(InstanceKlass,               _major_version,                                u2)                                    \
+  nonstatic_field(InstanceKlass,               _init_state,                                   u1)                                    \
+  nonstatic_field(InstanceKlass,               _init_thread,                                  Thread*)                               \
+  nonstatic_field(InstanceKlass,               _vtable_len,                                   int)                                   \
+  nonstatic_field(InstanceKlass,               _itable_len,                                   int)                                   \
+  nonstatic_field(InstanceKlass,               _reference_type,                               u1)                                    \
+  volatile_nonstatic_field(InstanceKlass,      _oop_map_cache,                                OopMapCache*)                          \
+  nonstatic_field(InstanceKlass,               _jni_ids,                                      JNIid*)                                \
+  nonstatic_field(InstanceKlass,               _osr_nmethods_head,                            nmethod*)                              \
+  nonstatic_field(InstanceKlass,               _breakpoints,                                  BreakpointInfo*)                       \
+  nonstatic_field(InstanceKlass,               _generic_signature,                            Symbol*)                               \
+  nonstatic_field(InstanceKlass,               _methods_jmethod_ids,                          jmethodID*)                            \
+  nonstatic_field(InstanceKlass,               _methods_cached_itable_indices,                int*)                                  \
+  volatile_nonstatic_field(InstanceKlass,      _idnum_allocated_count,                        u2)                                    \
+  nonstatic_field(InstanceKlass,               _annotations,                                  Annotations*)                          \
+  nonstatic_field(InstanceKlass,               _dependencies,                                 nmethodBucket*)                        \
   nonstatic_field(nmethodBucket,               _nmethod,                                      nmethod*)                              \
   nonstatic_field(nmethodBucket,               _count,                                        int)                                   \
   nonstatic_field(nmethodBucket,               _next,                                         nmethodBucket*)                        \
+  nonstatic_field(InstanceKlass,               _method_ordering,                              Array<int>*)                           \
   nonstatic_field(Klass,                       _super_check_offset,                           juint)                                 \
-  nonstatic_field(Klass,                       _secondary_super_cache,                        klassOop)                              \
-  nonstatic_field(Klass,                       _secondary_supers,                             objArrayOop)                           \
-  nonstatic_field(Klass,                       _primary_supers[0],                            klassOop)                              \
+  nonstatic_field(Klass,                       _secondary_super_cache,                        Klass*)                                \
+  nonstatic_field(Klass,                       _secondary_supers,                             Array<Klass*>*)                        \
+  nonstatic_field(Klass,                       _primary_supers[0],                            Klass*)                                \
   nonstatic_field(Klass,                       _java_mirror,                                  oop)                                   \
   nonstatic_field(Klass,                       _modifier_flags,                               jint)                                  \
-  nonstatic_field(Klass,                       _super,                                        klassOop)                              \
+  nonstatic_field(Klass,                       _super,                                        Klass*)                                \
   nonstatic_field(Klass,                       _layout_helper,                                jint)                                  \
   nonstatic_field(Klass,                       _name,                                         Symbol*)                               \
   nonstatic_field(Klass,                       _access_flags,                                 AccessFlags)                           \
-  nonstatic_field(Klass,                       _subklass,                                     klassOop)                              \
-  nonstatic_field(Klass,                       _next_sibling,                                 klassOop)                              \
+  nonstatic_field(Klass,                       _subklass,                                     Klass*)                                \
+  nonstatic_field(Klass,                       _next_sibling,                                 Klass*)                                \
   nonproduct_nonstatic_field(Klass,            _verify_count,                                 int)                                   \
   nonstatic_field(Klass,                       _alloc_count,                                  juint)                                 \
-  nonstatic_field(klassKlass,                  _alloc_size,                                   juint)                                 \
-  nonstatic_field(methodKlass,                 _alloc_size,                                   juint)                                 \
-  nonstatic_field(methodDataOopDesc,           _size,                                         int)                                   \
-  nonstatic_field(methodDataOopDesc,           _method,                                       methodOop)                             \
-  nonstatic_field(methodDataOopDesc,           _data_size,                                    int)                                   \
-  nonstatic_field(methodDataOopDesc,           _data[0],                                      intptr_t)                              \
-  nonstatic_field(methodDataOopDesc,           _nof_decompiles,                               uint)                                  \
-  nonstatic_field(methodDataOopDesc,           _nof_overflow_recompiles,                      uint)                                  \
-  nonstatic_field(methodDataOopDesc,           _nof_overflow_traps,                           uint)                                  \
-  nonstatic_field(methodDataOopDesc,           _eflags,                                       intx)                                  \
-  nonstatic_field(methodDataOopDesc,           _arg_local,                                    intx)                                  \
-  nonstatic_field(methodDataOopDesc,           _arg_stack,                                    intx)                                  \
-  nonstatic_field(methodDataOopDesc,           _arg_returned,                                 intx)                                  \
-  nonstatic_field(methodOopDesc,               _constMethod,                                  constMethodOop)                        \
-  nonstatic_field(methodOopDesc,               _method_data,                                  methodDataOop)                         \
-  nonstatic_field(methodOopDesc,               _interpreter_invocation_count,                 int)                                   \
-  nonstatic_field(methodOopDesc,               _access_flags,                                 AccessFlags)                           \
-  nonstatic_field(methodOopDesc,               _vtable_index,                                 int)                                   \
-  nonstatic_field(methodOopDesc,               _method_size,                                  u2)                                    \
-  nonstatic_field(methodOopDesc,               _max_stack,                                    u2)                                    \
-  nonstatic_field(methodOopDesc,               _max_locals,                                   u2)                                    \
-  nonstatic_field(methodOopDesc,               _size_of_parameters,                           u2)                                    \
-  nonstatic_field(methodOopDesc,               _interpreter_throwout_count,                   u2)                                    \
-  nonstatic_field(methodOopDesc,               _number_of_breakpoints,                        u2)                                    \
-  nonstatic_field(methodOopDesc,               _invocation_counter,                           InvocationCounter)                     \
-  nonstatic_field(methodOopDesc,               _backedge_counter,                             InvocationCounter)                     \
-  nonproduct_nonstatic_field(methodOopDesc,    _compiled_invocation_count,                    int)                                   \
-  volatile_nonstatic_field(methodOopDesc,      _code,                                         nmethod*)                              \
-  nonstatic_field(methodOopDesc,               _i2i_entry,                                    address)                               \
-  nonstatic_field(methodOopDesc,               _adapter,                                      AdapterHandlerEntry*)                  \
-  volatile_nonstatic_field(methodOopDesc,      _from_compiled_entry,                          address)                               \
-  volatile_nonstatic_field(methodOopDesc,      _from_interpreted_entry,                       address)                               \
-  volatile_nonstatic_field(constMethodOopDesc, _fingerprint,                                  uint64_t)                              \
-  nonstatic_field(constMethodOopDesc,          _constants,                                    constantPoolOop)                       \
-  nonstatic_field(constMethodOopDesc,          _stackmap_data,                                typeArrayOop)                          \
-  nonstatic_field(constMethodOopDesc,          _constMethod_size,                             int)                                   \
-  nonstatic_field(constMethodOopDesc,          _interpreter_kind,                             jbyte)                                 \
-  nonstatic_field(constMethodOopDesc,          _flags,                                        jbyte)                                 \
-  nonstatic_field(constMethodOopDesc,          _code_size,                                    u2)                                    \
-  nonstatic_field(constMethodOopDesc,          _name_index,                                   u2)                                    \
-  nonstatic_field(constMethodOopDesc,          _signature_index,                              u2)                                    \
-  nonstatic_field(constMethodOopDesc,          _method_idnum,                                 u2)                                    \
-  nonstatic_field(constMethodOopDesc,          _generic_signature_index,                      u2)                                    \
-  nonstatic_field(objArrayKlass,               _element_klass,                                klassOop)                              \
-  nonstatic_field(objArrayKlass,               _bottom_klass,                                 klassOop)                              \
+  nonstatic_field(MethodData,           _size,                                         int)                                   \
+  nonstatic_field(MethodData,           _method,                                       Method*)                        \
+  nonstatic_field(MethodData,           _data_size,                                    int)                                   \
+  nonstatic_field(MethodData,           _data[0],                                      intptr_t)                              \
+  nonstatic_field(MethodData,           _nof_decompiles,                               uint)                                  \
+  nonstatic_field(MethodData,           _nof_overflow_recompiles,                      uint)                                  \
+  nonstatic_field(MethodData,           _nof_overflow_traps,                           uint)                                  \
+  nonstatic_field(MethodData,           _eflags,                                       intx)                                  \
+  nonstatic_field(MethodData,           _arg_local,                                    intx)                                  \
+  nonstatic_field(MethodData,           _arg_stack,                                    intx)                                  \
+  nonstatic_field(MethodData,           _arg_returned,                                 intx)                                  \
+  nonstatic_field(Method,               _constMethod,                                  ConstMethod*)                   \
+  nonstatic_field(Method,               _method_data,                                  MethodData*)                    \
+  nonstatic_field(Method,               _interpreter_invocation_count,                 int)                                   \
+  nonstatic_field(Method,               _access_flags,                                 AccessFlags)                           \
+  nonstatic_field(Method,               _vtable_index,                                 int)                                   \
+  nonstatic_field(Method,               _method_size,                                  u2)                                    \
+  nonstatic_field(Method,               _max_stack,                                    u2)                                    \
+  nonstatic_field(Method,               _max_locals,                                   u2)                                    \
+  nonstatic_field(Method,               _size_of_parameters,                           u2)                                    \
+  nonstatic_field(Method,               _interpreter_throwout_count,                   u2)                                    \
+  nonstatic_field(Method,               _number_of_breakpoints,                        u2)                                    \
+  nonstatic_field(Method,               _invocation_counter,                           InvocationCounter)                     \
+  nonstatic_field(Method,               _backedge_counter,                             InvocationCounter)                     \
+  nonproduct_nonstatic_field(Method,    _compiled_invocation_count,                    int)                                   \
+  volatile_nonstatic_field(Method,      _code,                                         nmethod*)                              \
+  nonstatic_field(Method,               _i2i_entry,                                    address)                               \
+  nonstatic_field(Method,               _adapter,                                      AdapterHandlerEntry*)                  \
+  volatile_nonstatic_field(Method,      _from_compiled_entry,                          address)                               \
+  volatile_nonstatic_field(Method,      _from_interpreted_entry,                       address)                               \
+  volatile_nonstatic_field(ConstMethod, _fingerprint,                                  uint64_t)                              \
+  nonstatic_field(ConstMethod,          _constants,                                    ConstantPool*)                  \
+  nonstatic_field(ConstMethod,          _stackmap_data,                                Array<u1>*)                            \
+  nonstatic_field(ConstMethod,          _constMethod_size,                             int)                                   \
+  nonstatic_field(ConstMethod,          _interpreter_kind,                             jbyte)                                 \
+  nonstatic_field(ConstMethod,          _flags,                                        jbyte)                                 \
+  nonstatic_field(ConstMethod,          _code_size,                                    u2)                                    \
+  nonstatic_field(ConstMethod,          _name_index,                                   u2)                                    \
+  nonstatic_field(ConstMethod,          _signature_index,                              u2)                                    \
+  nonstatic_field(ConstMethod,          _method_idnum,                                 u2)                                    \
+  nonstatic_field(ConstMethod,          _generic_signature_index,                      u2)                                    \
+  nonstatic_field(objArrayKlass,               _element_klass,                                Klass*)                                \
+  nonstatic_field(objArrayKlass,               _bottom_klass,                                 Klass*)                                \
   volatile_nonstatic_field(Symbol,             _refcount,                                     int)                                   \
   nonstatic_field(Symbol,                      _identity_hash,                                int)                                   \
   nonstatic_field(Symbol,                      _length,                                       unsigned short)                        \
@@ -409,7 +392,7 @@
   /***********************/                                                                                                          \
                                                                                                                                      \
   volatile_nonstatic_field(ConstantPoolCacheEntry,      _indices,                                      intx)                         \
-  volatile_nonstatic_field(ConstantPoolCacheEntry,      _f1,                                           oop)                          \
+  nonstatic_field(ConstantPoolCacheEntry,               _f1,                                           volatile Metadata*)           \
   volatile_nonstatic_field(ConstantPoolCacheEntry,      _f2,                                           intx)                         \
   volatile_nonstatic_field(ConstantPoolCacheEntry,      _flags,                                        intx)                         \
                                                                                                                                      \
@@ -437,40 +420,24 @@
   /* JNI IDs */                                                                                                                      \
   /***********/                                                                                                                      \
                                                                                                                                      \
-  nonstatic_field(JNIid,                       _holder,                                       klassOop)                              \
+  nonstatic_field(JNIid,                       _holder,                                       Klass*)                                \
   nonstatic_field(JNIid,                       _next,                                         JNIid*)                                \
   nonstatic_field(JNIid,                       _offset,                                       int)                                   \
   /************/                                                                                                                     \
   /* Universe */                                                                                                                     \
   /************/                                                                                                                     \
                                                                                                                                      \
-     static_field(Universe,                    _boolArrayKlassObj,                            klassOop)                              \
-     static_field(Universe,                    _byteArrayKlassObj,                            klassOop)                              \
-     static_field(Universe,                    _charArrayKlassObj,                            klassOop)                              \
-     static_field(Universe,                    _intArrayKlassObj,                             klassOop)                              \
-     static_field(Universe,                    _shortArrayKlassObj,                           klassOop)                              \
-     static_field(Universe,                    _longArrayKlassObj,                            klassOop)                              \
-     static_field(Universe,                    _singleArrayKlassObj,                          klassOop)                              \
-     static_field(Universe,                    _doubleArrayKlassObj,                          klassOop)                              \
-     static_field(Universe,                    _methodKlassObj,                               klassOop)                              \
-     static_field(Universe,                    _constMethodKlassObj,                          klassOop)                              \
-     static_field(Universe,                    _methodDataKlassObj,                           klassOop)                              \
-     static_field(Universe,                    _klassKlassObj,                                klassOop)                              \
-     static_field(Universe,                    _arrayKlassKlassObj,                           klassOop)                              \
-     static_field(Universe,                    _objArrayKlassKlassObj,                        klassOop)                              \
-     static_field(Universe,                    _typeArrayKlassKlassObj,                       klassOop)                              \
-     static_field(Universe,                    _instanceKlassKlassObj,                        klassOop)                              \
-     static_field(Universe,                    _constantPoolKlassObj,                         klassOop)                              \
-     static_field(Universe,                    _constantPoolCacheKlassObj,                    klassOop)                              \
-     static_field(Universe,                    _compiledICHolderKlassObj,                     klassOop)                              \
-     static_field(Universe,                    _systemObjArrayKlassObj,                       klassOop)                              \
+     static_field(Universe,                    _boolArrayKlassObj,                            Klass*)                                \
+     static_field(Universe,                    _byteArrayKlassObj,                            Klass*)                                \
+     static_field(Universe,                    _charArrayKlassObj,                            Klass*)                                \
+     static_field(Universe,                    _intArrayKlassObj,                             Klass*)                                \
+     static_field(Universe,                    _shortArrayKlassObj,                           Klass*)                                \
+     static_field(Universe,                    _longArrayKlassObj,                            Klass*)                                \
+     static_field(Universe,                    _singleArrayKlassObj,                          Klass*)                                \
+     static_field(Universe,                    _doubleArrayKlassObj,                          Klass*)                                \
      static_field(Universe,                    _mirrors[0],                                   oop)                                   \
      static_field(Universe,                    _main_thread_group,                            oop)                                   \
      static_field(Universe,                    _system_thread_group,                          oop)                                   \
-     static_field(Universe,                    _the_empty_byte_array,                         typeArrayOop)                          \
-     static_field(Universe,                    _the_empty_short_array,                        typeArrayOop)                          \
-     static_field(Universe,                    _the_empty_int_array,                          typeArrayOop)                          \
-     static_field(Universe,                    _the_empty_system_obj_array,                   objArrayOop)                           \
      static_field(Universe,                    _the_empty_class_klass_array,                  objArrayOop)                           \
      static_field(Universe,                    _out_of_memory_error_java_heap,                oop)                                   \
      static_field(Universe,                    _out_of_memory_error_perm_gen,                 oop)                                   \
@@ -528,7 +495,6 @@
   nonstatic_field(CardTableRS,                 _ct_bs,                                        CardTableModRefBSForCTRS*)             \
                                                                                                                                      \
   nonstatic_field(CollectedHeap,               _reserved,                                     MemRegion)                             \
-  nonstatic_field(SharedHeap,                  _perm_gen,                                     PermGen*)                              \
   nonstatic_field(CollectedHeap,               _barrier_set,                                  BarrierSet*)                           \
   nonstatic_field(CollectedHeap,               _defer_initial_card_mark,                      bool)                                  \
   nonstatic_field(CollectedHeap,               _is_gc_active,                                 bool)                                  \
@@ -536,7 +502,6 @@
   nonstatic_field(CompactibleSpace,            _first_dead,                                   HeapWord*)                             \
   nonstatic_field(CompactibleSpace,            _end_of_live,                                  HeapWord*)                             \
                                                                                                                                      \
-  nonstatic_field(CompactingPermGen,           _gen,                                          OneContigSpaceCardGeneration*)         \
                                                                                                                                      \
   nonstatic_field(ContiguousSpace,             _top,                                          HeapWord*)                             \
   nonstatic_field(ContiguousSpace,             _concurrent_iteration_safe_limit,              HeapWord*)                             \
@@ -579,30 +544,7 @@
   nonstatic_field(OneContigSpaceCardGeneration, _the_space,                                   ContiguousSpace*)                      \
   nonstatic_field(OneContigSpaceCardGeneration, _last_gc,                                     WaterMark)                             \
                                                                                                                                      \
-  nonstatic_field(CompactingPermGenGen,        _ro_vs,                                        VirtualSpace)                          \
-  nonstatic_field(CompactingPermGenGen,        _rw_vs,                                        VirtualSpace)                          \
-  nonstatic_field(CompactingPermGenGen,        _md_vs,                                        VirtualSpace)                          \
-  nonstatic_field(CompactingPermGenGen,        _mc_vs,                                        VirtualSpace)                          \
-  nonstatic_field(CompactingPermGenGen,        _ro_space,                                     OffsetTableContigSpace*)               \
-  nonstatic_field(CompactingPermGenGen,        _rw_space,                                     OffsetTableContigSpace*)               \
-     static_field(CompactingPermGenGen,        unshared_bottom,                               HeapWord*)                             \
-     static_field(CompactingPermGenGen,        unshared_end,                                  HeapWord*)                             \
-     static_field(CompactingPermGenGen,        shared_bottom,                                 HeapWord*)                             \
-     static_field(CompactingPermGenGen,        readonly_bottom,                               HeapWord*)                             \
-     static_field(CompactingPermGenGen,        readonly_end,                                  HeapWord*)                             \
-     static_field(CompactingPermGenGen,        readwrite_bottom,                              HeapWord*)                             \
-     static_field(CompactingPermGenGen,        readwrite_end,                                 HeapWord*)                             \
-     static_field(CompactingPermGenGen,        miscdata_bottom,                               HeapWord*)                             \
-     static_field(CompactingPermGenGen,        miscdata_end,                                  HeapWord*)                             \
-     static_field(CompactingPermGenGen,        misccode_bottom,                               HeapWord*)                             \
-     static_field(CompactingPermGenGen,        misccode_end,                                  HeapWord*)                             \
-     static_field(CompactingPermGenGen,        shared_end,                                    HeapWord*)                             \
                                                                                                                                      \
-  nonstatic_field(PermGen,                     _capacity_expansion_limit,                     size_t)                                \
-                                                                                                                                     \
-  nonstatic_field(PermanentGenerationSpec,     _name,                                         PermGen::Name)                         \
-  nonstatic_field(PermanentGenerationSpec,     _init_size,                                    size_t)                                \
-  nonstatic_field(PermanentGenerationSpec,     _max_size,                                     size_t)                                \
                                                                                                                                      \
   nonstatic_field(Space,                       _bottom,                                       HeapWord*)                             \
   nonstatic_field(Space,                       _end,                                          HeapWord*)                             \
@@ -677,40 +619,40 @@
       static_field(SystemDictionary,            _shared_dictionary,                            Dictionary*)                          \
       static_field(SystemDictionary,            _system_loader_lock_obj,                       oop)                                  \
       static_field(SystemDictionary,            _loader_constraints,                           LoaderConstraintTable*)               \
-      static_field(SystemDictionary,            WK_KLASS(Object_klass),                        klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(String_klass),                        klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Class_klass),                         klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Cloneable_klass),                     klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(ClassLoader_klass),                   klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Serializable_klass),                  klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(System_klass),                        klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Throwable_klass),                     klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(ThreadDeath_klass),                   klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Error_klass),                         klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Exception_klass),                     klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(RuntimeException_klass),              klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(ClassNotFoundException_klass),        klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(NoClassDefFoundError_klass),          klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(LinkageError_klass),                  klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(ClassCastException_klass),            klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(ArrayStoreException_klass),           klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(VirtualMachineError_klass),           klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(OutOfMemoryError_klass),              klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(StackOverflowError_klass),            klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(ProtectionDomain_klass),              klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(AccessControlContext_klass),          klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Reference_klass),                     klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(SoftReference_klass),                 klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(WeakReference_klass),                 klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(FinalReference_klass),                klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(PhantomReference_klass),              klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Finalizer_klass),                     klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Thread_klass),                        klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(ThreadGroup_klass),                   klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(Properties_klass),                    klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(StringBuffer_klass),                  klassOop)                             \
-      static_field(SystemDictionary,            WK_KLASS(MethodHandle_klass),                  klassOop)                             \
-      static_field(SystemDictionary,            _box_klasses[0],                               klassOop)                             \
+      static_field(SystemDictionary,            WK_KLASS(Object_klass),                        Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(String_klass),                        Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Class_klass),                         Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Cloneable_klass),                     Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(ClassLoader_klass),                   Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Serializable_klass),                  Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(System_klass),                        Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Throwable_klass),                     Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(ThreadDeath_klass),                   Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Error_klass),                         Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Exception_klass),                     Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(RuntimeException_klass),              Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(ClassNotFoundException_klass),        Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(NoClassDefFoundError_klass),          Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(LinkageError_klass),                  Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(ClassCastException_klass),            Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(ArrayStoreException_klass),           Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(VirtualMachineError_klass),           Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(OutOfMemoryError_klass),              Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(StackOverflowError_klass),            Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(ProtectionDomain_klass),              Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(AccessControlContext_klass),          Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Reference_klass),                     Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(SoftReference_klass),                 Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(WeakReference_klass),                 Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(FinalReference_klass),                Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(PhantomReference_klass),              Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Finalizer_klass),                     Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Thread_klass),                        Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(ThreadGroup_klass),                   Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(Properties_klass),                    Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(StringBuffer_klass),                  Klass*)                               \
+      static_field(SystemDictionary,            WK_KLASS(MethodHandle_klass),                  Klass*)                               \
+      static_field(SystemDictionary,            _box_klasses[0],                               Klass*)                               \
       static_field(SystemDictionary,            _java_system_loader,                           oop)                                  \
                                                                                                                                      \
   /*************/                                                                                                                    \
@@ -748,12 +690,12 @@
   /* DictionaryEntry */                                                                                                              \
   /*******************/                                                                                                              \
                                                                                                                                      \
-  nonstatic_field(DictionaryEntry,             _loader,                                       oop)                                   \
+  nonstatic_field(DictionaryEntry,             _loader_data,                                  ClassLoaderData*)                      \
   nonstatic_field(DictionaryEntry,             _pd_set,                                       ProtectionDomainEntry*)                \
                                                                                                                                      \
   /********************/                                                                                                             \
                                                                                                                                      \
-  nonstatic_field(PlaceholderEntry,            _loader,                                       oop)                                   \
+  nonstatic_field(PlaceholderEntry,            _loader_data,                                  ClassLoaderData*)                      \
                                                                                                                                      \
   /**************************/                                                                                                       \
   /* ProctectionDomainEntry */                                                                                                       \
@@ -769,7 +711,13 @@
   nonstatic_field(LoaderConstraintEntry,       _name,                                         Symbol*)                               \
   nonstatic_field(LoaderConstraintEntry,       _num_loaders,                                  int)                                   \
   nonstatic_field(LoaderConstraintEntry,       _max_loaders,                                  int)                                   \
-  nonstatic_field(LoaderConstraintEntry,       _loaders,                                      oop*)                                  \
+  nonstatic_field(LoaderConstraintEntry,       _loaders,                                      ClassLoaderData**)                     \
+                                                                                                                                     \
+  nonstatic_field(ClassLoaderData,             _class_loader,                                 oop)                                   \
+  nonstatic_field(ClassLoaderData,             _next,                                         ClassLoaderData*)                      \
+                                                                                                                                     \
+  static_field(ClassLoaderDataGraph,           _head,                                         ClassLoaderData*)                      \
+  nonstatic_field(ClassLoaderDataGraph,        _unloading,                                    ClassLoaderData*)                      \
                                                                                                                                      \
   /*******************/                                                                                                              \
   /* GrowableArrays  */                                                                                                              \
@@ -853,7 +801,7 @@
   /* NMethods (NOTE: incomplete, but only a little) */                                                                               \
   /**************************************************/                                                                               \
                                                                                                                                      \
-  nonstatic_field(nmethod,             _method,                                       methodOop)                             \
+  nonstatic_field(nmethod,             _method,                                       Method*)                        \
   nonstatic_field(nmethod,             _entry_bci,                                    int)                                   \
   nonstatic_field(nmethod,             _osr_link,                                     nmethod*)                              \
   nonstatic_field(nmethod,             _scavenge_root_link,                           nmethod*)                              \
@@ -866,6 +814,7 @@
   nonstatic_field(nmethod,             _stub_offset,                                  int)                                   \
   nonstatic_field(nmethod,             _consts_offset,                                int)                                   \
   nonstatic_field(nmethod,             _oops_offset,                                  int)                                   \
+  nonstatic_field(nmethod,             _metadata_offset,                              int)                                   \
   nonstatic_field(nmethod,             _scopes_data_offset,                           int)                                   \
   nonstatic_field(nmethod,             _scopes_pcs_offset,                            int)                                   \
   nonstatic_field(nmethod,             _dependencies_offset,                          int)                                   \
@@ -918,7 +867,7 @@
   nonstatic_field(JavaThread,                  _threadObj,                                    oop)                                   \
   nonstatic_field(JavaThread,                  _anchor,                                       JavaFrameAnchor)                       \
   nonstatic_field(JavaThread,                  _vm_result,                                    oop)                                   \
-  nonstatic_field(JavaThread,                  _vm_result_2,                                  oop)                                   \
+  nonstatic_field(JavaThread,                  _vm_result_2,                                  Metadata*)                             \
   nonstatic_field(JavaThread,                  _pending_async_exception,                      oop)                                   \
   volatile_nonstatic_field(JavaThread,         _exception_oop,                                oop)                                   \
   volatile_nonstatic_field(JavaThread,         _exception_pc,                                 address)                               \
@@ -1008,11 +957,13 @@
  nonstatic_field(ciEnv,               _task, CompileTask*)                                                                           \
  nonstatic_field(ciEnv,               _arena, Arena*)                                                                                \
                                                                                                                                      \
+ nonstatic_field(ciBaseObject,    _ident, uint)                                                                                      \
+                                                                                                                                     \
  nonstatic_field(ciObject,    _handle, jobject)                                                                                      \
  nonstatic_field(ciObject,    _klass, ciKlass*)                                                                                      \
- nonstatic_field(ciObject,    _ident, uint)                                                                                          \
                                                                                                                                      \
- nonstatic_field(ciSymbol,    _ident, uint)                                                                                          \
+ nonstatic_field(ciMetadata,  _metadata, Metadata*)                                                                           \
+                                                                                                                                     \
  nonstatic_field(ciSymbol,    _symbol, Symbol*)                                                                                      \
                                                                                                                                      \
  nonstatic_field(ciType,    _basic_type, BasicType)                                                                                  \
@@ -1024,7 +975,7 @@
  nonstatic_field(ciObjArrayKlass, _element_klass, ciKlass*)                                                                          \
  nonstatic_field(ciObjArrayKlass, _base_element_klass, ciKlass*)                                                                     \
                                                                                                                                      \
- nonstatic_field(ciInstanceKlass,   _init_state, instanceKlass::ClassState)                                                          \
+ nonstatic_field(ciInstanceKlass,   _init_state, InstanceKlass::ClassState)                                                          \
  nonstatic_field(ciInstanceKlass,   _is_shared,  bool)                                                                               \
                                                                                                                                      \
  nonstatic_field(ciMethod,     _interpreter_invocation_count, int)                                                                   \
@@ -1040,7 +991,7 @@
  nonstatic_field(ciMethodData, _arg_stack, intx)                                                                                     \
  nonstatic_field(ciMethodData, _arg_returned, intx)                                                                                  \
  nonstatic_field(ciMethodData, _current_mileage, int)                                                                                \
- nonstatic_field(ciMethodData, _orig, methodDataOopDesc)                                                                             \
+ nonstatic_field(ciMethodData, _orig, MethodData)                                                                             \
                                                                                                                                      \
  nonstatic_field(ciField,     _holder, ciInstanceKlass*)                                                                             \
  nonstatic_field(ciField,     _name, ciSymbol*)                                                                                      \
@@ -1049,7 +1000,7 @@
  nonstatic_field(ciField,     _is_constant, bool)                                                                                    \
  nonstatic_field(ciField,     _constant_value, ciConstant)                                                                           \
                                                                                                                                      \
- nonstatic_field(ciObjectFactory,     _ci_objects, GrowableArray<ciObject*>*)                                                        \
+ nonstatic_field(ciObjectFactory,     _ci_metadata, GrowableArray<ciMetadata*>*)                                                     \
  nonstatic_field(ciObjectFactory,     _symbols, GrowableArray<ciSymbol*>*)                                                           \
  nonstatic_field(ciObjectFactory,     _unloaded_methods, GrowableArray<ciMethod*>*)                                                  \
                                                                                                                                      \
@@ -1234,6 +1185,17 @@
   static_field(Arguments,                      _num_jvm_args,                                 int)                                   \
   static_field(Arguments,                      _java_command,                                 char*)                                 \
                                                                                                                                      \
+  /************/                                                                                                                     \
+  /* Array<T> */                                                                                                                     \
+  /************/                                                                                                                     \
+                                                                                                                                     \
+  nonstatic_field(Array<int>,                      _length,                                   int)                                   \
+  unchecked_nonstatic_field(Array<int>,            _data,                                     sizeof(int))                           \
+  unchecked_nonstatic_field(Array<u1>,             _data,                                     sizeof(u1))                            \
+  unchecked_nonstatic_field(Array<u2>,             _data,                                     sizeof(u2))                            \
+  unchecked_nonstatic_field(Array<Method*>, _data,                                     sizeof(Method*))                \
+  unchecked_nonstatic_field(Array<Klass*>,         _data,                                     sizeof(Klass*))                        \
+                                                                                                                                     \
   /*********************************/                                                                                                \
   /* java_lang_Class fields        */                                                                                                \
   /*********************************/                                                                                                \
@@ -1248,7 +1210,7 @@
   /* Miscellaneous fields */                                                                                                         \
   /************************/                                                                                                         \
                                                                                                                                      \
-  nonstatic_field(CompileTask,                 _method,                                      jobject)                                \
+  nonstatic_field(CompileTask,                 _method,                                      Method*)                         \
   nonstatic_field(CompileTask,                 _osr_bci,                                     int)                                    \
   nonstatic_field(CompileTask,                 _comp_level,                                  int)                                    \
   nonstatic_field(CompileTask,                 _compile_id,                                  uint)                                   \
@@ -1262,7 +1224,7 @@
                                                                                                                                      \
   nonstatic_field(vframeArrayElement,          _frame,                                       frame)                                  \
   nonstatic_field(vframeArrayElement,          _bci,                                         int)                                    \
-  nonstatic_field(vframeArrayElement,          _method,                                      methodOop)                              \
+  nonstatic_field(vframeArrayElement,          _method,                                      Method*)                         \
                                                                                                                                      \
   nonstatic_field(AccessFlags,                 _flags,                                       jint)                                   \
   nonstatic_field(elapsedTimer,                _counter,                                     jlong)                                  \
@@ -1360,14 +1322,15 @@
   declare_unsigned_integer_type(unsigned long)                            \
   /* The compiler thinks this is a different type than */                 \
   /* unsigned short on Win32 */                                           \
+  declare_unsigned_integer_type(u1)                                       \
   declare_unsigned_integer_type(u2)                                       \
-  declare_unsigned_integer_type(u1)                                       \
   declare_unsigned_integer_type(unsigned)                                 \
                                                                           \
   /*****************************/                                         \
   /* C primitive pointer types */                                         \
   /*****************************/                                         \
                                                                           \
+  declare_toplevel_type(void*)                                            \
   declare_toplevel_type(int*)                                             \
   declare_toplevel_type(char*)                                            \
   declare_toplevel_type(char**)                                           \
@@ -1389,44 +1352,40 @@
   declare_unsigned_integer_type(uint32_t)                                 \
   declare_unsigned_integer_type(uint64_t)                                 \
                                                                           \
-  /*******************************************************************************/ \
-  /* OopDesc and Klass hierarchies (NOTE: missing methodDataOop-related classes) */ \
-  /*******************************************************************************/ \
+  /******************************************/                            \
+  /* OopDesc hierarchy (NOTE: some missing) */                            \
+  /******************************************/                            \
                                                                           \
   declare_toplevel_type(oopDesc)                                          \
-  declare_toplevel_type(Klass_vtbl)                                       \
-           declare_type(Klass, Klass_vtbl)                                \
+    declare_type(arrayOopDesc, oopDesc)                                   \
+      declare_type(objArrayOopDesc, arrayOopDesc)                         \
+    declare_type(instanceOopDesc, oopDesc)                                \
+    declare_type(markOopDesc, oopDesc)                                    \
+                                                                          \
+  /**************************************************/                    \
+  /* MetadataOopDesc hierarchy (NOTE: some missing) */                    \
+  /**************************************************/                    \
+                                                                          \
+  declare_toplevel_type(CompiledICHolder)                          \
+  declare_toplevel_type(MetaspaceObj)                                     \
+    declare_type(Metadata, MetaspaceObj)                                  \
+    declare_type(Klass, Metadata)                                         \
            declare_type(arrayKlass, Klass)                                \
-           declare_type(arrayKlassKlass, klassKlass)                      \
-           declare_type(arrayOopDesc, oopDesc)                            \
-   declare_type(compiledICHolderKlass, Klass)                             \
-   declare_type(compiledICHolderOopDesc, oopDesc)                         \
-           declare_type(constantPoolKlass, Klass)                         \
-           declare_type(constantPoolOopDesc, oopDesc)                     \
-           declare_type(constantPoolCacheKlass, Klass)                    \
-           declare_type(constantPoolCacheOopDesc, oopDesc)                \
-           declare_type(instanceKlass, Klass)                             \
-           declare_type(instanceKlassKlass, klassKlass)                   \
-           declare_type(instanceOopDesc, oopDesc)                         \
-           declare_type(instanceMirrorKlass, instanceKlass)               \
-           declare_type(instanceRefKlass, instanceKlass)                  \
-           declare_type(klassKlass, Klass)                                \
-           declare_type(klassOopDesc, oopDesc)                            \
-           declare_type(markOopDesc, oopDesc)                             \
-   declare_type(methodDataKlass, Klass)                                   \
-   declare_type(methodDataOopDesc, oopDesc)                               \
-           declare_type(methodKlass, Klass)                               \
-           declare_type(constMethodKlass, Klass)                          \
-           declare_type(methodOopDesc, oopDesc)                           \
            declare_type(objArrayKlass, arrayKlass)                        \
-           declare_type(objArrayKlassKlass, arrayKlassKlass)              \
-           declare_type(objArrayOopDesc, arrayOopDesc)                    \
-           declare_type(constMethodOopDesc, oopDesc)                      \
            declare_type(typeArrayKlass, arrayKlass)                       \
-           declare_type(typeArrayKlassKlass, arrayKlassKlass)             \
-           declare_type(typeArrayOopDesc, arrayOopDesc)                   \
+      declare_type(InstanceKlass, Klass)                                  \
+        declare_type(instanceClassLoaderKlass, InstanceKlass)             \
+        declare_type(instanceMirrorKlass, InstanceKlass)                  \
+        declare_type(instanceRefKlass, InstanceKlass)                     \
+    declare_type(ConstantPool, Metadata)                           \
+    declare_type(ConstantPoolCache, MetaspaceObj)                  \
+    declare_type(MethodData, Metadata)                             \
+    declare_type(Method, Metadata)                                 \
+    declare_type(ConstMethod, MetaspaceObj)                        \
+                                                                          \
            declare_toplevel_type(Symbol)                                  \
            declare_toplevel_type(Symbol*)                                 \
+  declare_toplevel_type(volatile Metadata*)                               \
                                                                           \
   declare_toplevel_type(nmethodBucket)                                    \
                                                                           \
@@ -1434,17 +1393,10 @@
   /* Oops */                                                              \
   /********/                                                              \
                                                                           \
-  declare_oop_type(constantPoolOop)                                       \
-  declare_oop_type(constantPoolCacheOop)                                  \
-  declare_oop_type(klassOop)                                              \
   declare_oop_type(markOop)                                               \
-  declare_oop_type(methodOop)                                             \
-  declare_oop_type(methodDataOop)                                         \
   declare_oop_type(objArrayOop)                                           \
   declare_oop_type(oop)                                                   \
   declare_oop_type(narrowOop)                                             \
-  declare_oop_type(wideKlassOop)                                          \
-  declare_oop_type(constMethodOop)                                        \
   declare_oop_type(typeArrayOop)                                          \
                                                                           \
   /*************************************/                                 \
@@ -1455,6 +1407,9 @@
   declare_toplevel_type(LocalVariableTableElement)                        \
   declare_toplevel_type(ExceptionTableElement)                            \
                                                                           \
+  declare_toplevel_type(ClassLoaderData)                                  \
+  declare_toplevel_type(ClassLoaderDataGraph)                             \
+                                                                          \
   /******************************************/                            \
   /* Generation and space hierarchies       */                            \
   /* (needed for run-time type information) */                            \
@@ -1468,7 +1423,6 @@
            declare_type(CardGeneration,               Generation)         \
            declare_type(OneContigSpaceCardGeneration, CardGeneration)     \
            declare_type(TenuredGeneration,            OneContigSpaceCardGeneration) \
-           declare_type(CompactingPermGenGen,         OneContigSpaceCardGeneration) \
   declare_toplevel_type(Space)                                            \
   declare_toplevel_type(BitMap)                                           \
            declare_type(CompactibleSpace,             Space)              \
@@ -1476,9 +1430,6 @@
            declare_type(EdenSpace,                    ContiguousSpace)    \
            declare_type(OffsetTableContigSpace,       ContiguousSpace)    \
            declare_type(TenuredSpace,                 OffsetTableContigSpace) \
-           declare_type(ContigPermSpace,              OffsetTableContigSpace) \
-  declare_toplevel_type(PermGen)                                          \
-           declare_type(CompactingPermGen,            PermGen)            \
   declare_toplevel_type(BarrierSet)                                       \
            declare_type(ModRefBarrierSet,             BarrierSet)         \
            declare_type(CardTableModRefBS,            ModRefBarrierSet)   \
@@ -1498,7 +1449,6 @@
   declare_toplevel_type(GenerationSpec)                                   \
   declare_toplevel_type(HeapWord)                                         \
   declare_toplevel_type(MemRegion)                                        \
-  declare_toplevel_type(PermanentGenerationSpec)                          \
   declare_toplevel_type(ThreadLocalAllocBuffer)                           \
   declare_toplevel_type(VirtualSpace)                                     \
   declare_toplevel_type(WaterMark)                                        \
@@ -1524,7 +1474,6 @@
   declare_toplevel_type(MemRegion*)                                       \
   declare_toplevel_type(OffsetTableContigSpace*)                          \
   declare_toplevel_type(OneContigSpaceCardGeneration*)                    \
-  declare_toplevel_type(PermGen*)                                         \
   declare_toplevel_type(Space*)                                           \
   declare_toplevel_type(ThreadLocalAllocBuffer*)                          \
                                                                           \
@@ -1545,15 +1494,15 @@
     declare_type(IntptrHashtable, BasicHashtable<mtInternal>)             \
   declare_type(SymbolTable, SymbolHashtable)                              \
   declare_type(StringTable, StringHashtable)                              \
-    declare_type(LoaderConstraintTable, klassOopHashtable)                \
-    declare_type(klassOopTwoOopHashtable, klassOopHashtable)              \
-    declare_type(Dictionary, klassOopTwoOopHashtable)                     \
+    declare_type(LoaderConstraintTable, KlassHashtable)                   \
+    declare_type(KlassTwoOopHashtable, KlassHashtable)                    \
+    declare_type(Dictionary, KlassTwoOopHashtable)                        \
     declare_type(PlaceholderTable, SymbolTwoOopHashtable)                 \
   declare_toplevel_type(BasicHashtableEntry<mtInternal>)                  \
   declare_type(IntptrHashtableEntry, BasicHashtableEntry<mtInternal>)     \
-    declare_type(DictionaryEntry, klassHashtableEntry)                    \
+    declare_type(DictionaryEntry, KlassHashtableEntry)                    \
     declare_type(PlaceholderEntry, SymbolHashtableEntry)                  \
-    declare_type(LoaderConstraintEntry, klassHashtableEntry)              \
+    declare_type(LoaderConstraintEntry, KlassHashtableEntry)              \
   declare_toplevel_type(HashtableBucket<mtInternal>)                      \
   declare_toplevel_type(SystemDictionary)                                 \
   declare_toplevel_type(vmSymbols)                                        \
@@ -2007,24 +1956,19 @@
   declare_toplevel_type(ciObjectFactory)                                  \
   declare_toplevel_type(ciConstant)                                       \
   declare_toplevel_type(ciField)                                          \
-  declare_toplevel_type(void*)                                            \
-  declare_toplevel_type(ciObject)                                         \
-  declare_type(ciMethod, ciObject)                                        \
-  declare_type(ciMethodData, ciObject)                                    \
-  declare_type(ciType, ciObject)                                          \
+  declare_toplevel_type(ciSymbol)                                         \
+  declare_toplevel_type(ciBaseObject)                                     \
+  declare_type(ciObject, ciBaseObject)                                    \
   declare_type(ciInstance, ciObject)                                      \
-  declare_toplevel_type(ciSymbol)                                         \
+  declare_type(ciMetadata, ciBaseObject)                                  \
+  declare_type(ciMethod, ciMetadata)                                      \
+  declare_type(ciMethodData, ciMetadata)                                  \
+  declare_type(ciType, ciMetadata)                                        \
   declare_type(ciKlass, ciType)                                           \
   declare_type(ciInstanceKlass, ciKlass)                                  \
   declare_type(ciArrayKlass, ciKlass)                                     \
   declare_type(ciTypeArrayKlass, ciArrayKlass)                            \
   declare_type(ciObjArrayKlass, ciArrayKlass)                             \
-  declare_type(ciMethodKlass, ciKlass)                                    \
-  declare_type(ciKlassKlass, ciKlass)                                     \
-  declare_type(ciInstanceKlassKlass, ciKlassKlass)                        \
-  declare_type(ciArrayKlassKlass, ciKlassKlass)                           \
-  declare_type(ciTypeArrayKlassKlass, ciArrayKlassKlass)                  \
-  declare_type(ciObjArrayKlassKlass, ciArrayKlassKlass)                   \
                                                                           \
   /********************/                                                  \
   /* -XX flags        */                                                  \
@@ -2060,14 +2004,20 @@
                                                                           \
    declare_integer_type(Bytecodes::Code)                                  \
    declare_integer_type(Generation::Name)                                 \
-   declare_integer_type(instanceKlass::ClassState)                        \
+   declare_integer_type(InstanceKlass::ClassState)                        \
    declare_integer_type(JavaThreadState)                                  \
    declare_integer_type(Location::Type)                                   \
    declare_integer_type(Location::Where)                                  \
-   declare_integer_type(PermGen::Name)                                    \
    declare_integer_type(FlagValueOrigin)                                  \
    COMPILER2_PRESENT(declare_integer_type(OptoReg::Name))                 \
                                                                           \
+   declare_toplevel_type(CHeapObj<mtInternal>)                            \
+            declare_type(Array<int>, MetaspaceObj)                        \
+            declare_type(Array<u1>, MetaspaceObj)                         \
+            declare_type(Array<u2>, MetaspaceObj)                         \
+            declare_type(Array<Klass*>, MetaspaceObj)                     \
+            declare_type(Array<Method*>, MetaspaceObj)             \
+                                                                          \
    declare_integer_type(AccessFlags)  /* FIXME: wrong type (not integer) */\
   declare_toplevel_type(address)      /* FIXME: should this be an integer type? */\
    declare_integer_type(BasicType)   /* FIXME: wrong type (not integer) */\
@@ -2108,7 +2058,8 @@
   declare_toplevel_type(Thread*)                                          \
   declare_toplevel_type(Universe)                                         \
   declare_toplevel_type(vframeArray)                                      \
-  declare_toplevel_type(vframeArrayElement)
+  declare_toplevel_type(vframeArrayElement)                               \
+  declare_toplevel_type(Annotations*)
 
 
   /* NOTE that we do not use the last_entry() macro here; it is used  */
@@ -2149,6 +2100,7 @@
                                                                           \
   declare_constant(oopSize)                                               \
   declare_constant(LogBytesPerWord)                                       \
+  declare_constant(BytesPerWord)                                          \
   declare_constant(BytesPerLong)                                          \
                                                                           \
   /********************************************/                          \
@@ -2197,10 +2149,6 @@
   declare_constant(HeapWordSize)                                          \
   declare_constant(LogHeapWordSize)                                       \
                                                                           \
-  /* constants from PermGen::Name enum */                                 \
-                                                                          \
-  declare_constant(PermGen::MarkSweepCompact)                             \
-  declare_constant(PermGen::MarkSweep)                                    \
                                                                           \
   /************************/                                              \
   /* PerfMemory - jvmstat */                                              \
@@ -2288,16 +2236,16 @@
   declare_constant(Klass::_lh_array_tag_obj_value)                        \
                                                                           \
   /********************************/                                      \
-  /* constMethodOopDesc anon-enum */                                      \
+  /* ConstMethod anon-enum */                                      \
   /********************************/                                      \
                                                                           \
-  declare_constant(constMethodOopDesc::_has_linenumber_table)             \
-  declare_constant(constMethodOopDesc::_has_checked_exceptions)           \
-  declare_constant(constMethodOopDesc::_has_localvariable_table)          \
-  declare_constant(constMethodOopDesc::_has_exception_table)              \
+  declare_constant(ConstMethod::_has_linenumber_table)             \
+  declare_constant(ConstMethod::_has_checked_exceptions)           \
+  declare_constant(ConstMethod::_has_localvariable_table)          \
+  declare_constant(ConstMethod::_has_exception_table)              \
                                                                           \
   /*************************************/                                 \
-  /* instanceKlass enum                */                                 \
+  /* InstanceKlass enum                */                                 \
   /*************************************/                                 \
                                                                           \
                                                                           \
@@ -2314,26 +2262,25 @@
   declare_constant(FieldInfo::field_slots)                                \
                                                                           \
   /************************************************/                      \
-  /* instanceKlass InnerClassAttributeOffset enum */                      \
+  /* InstanceKlass InnerClassAttributeOffset enum */                      \
   /************************************************/                      \
                                                                           \
-  declare_constant(instanceKlass::inner_class_inner_class_info_offset)    \
-  declare_constant(instanceKlass::inner_class_outer_class_info_offset)    \
-  declare_constant(instanceKlass::inner_class_inner_name_offset)          \
-  declare_constant(instanceKlass::inner_class_access_flags_offset)        \
-  declare_constant(instanceKlass::inner_class_next_offset)                \
+  declare_constant(InstanceKlass::inner_class_inner_class_info_offset)    \
+  declare_constant(InstanceKlass::inner_class_outer_class_info_offset)    \
+  declare_constant(InstanceKlass::inner_class_inner_name_offset)          \
+  declare_constant(InstanceKlass::inner_class_access_flags_offset)        \
+  declare_constant(InstanceKlass::inner_class_next_offset)                \
                                                                           \
   /*********************************/                                     \
-  /* instanceKlass ClassState enum */                                     \
+  /* InstanceKlass ClassState enum */                                     \
   /*********************************/                                     \
                                                                           \
-  declare_constant(instanceKlass::unparsable_by_gc)                       \
-  declare_constant(instanceKlass::allocated)                              \
-  declare_constant(instanceKlass::loaded)                                 \
-  declare_constant(instanceKlass::linked)                                 \
-  declare_constant(instanceKlass::being_initialized)                      \
-  declare_constant(instanceKlass::fully_initialized)                      \
-  declare_constant(instanceKlass::initialization_error)                   \
+  declare_constant(InstanceKlass::allocated)                              \
+  declare_constant(InstanceKlass::loaded)                                 \
+  declare_constant(InstanceKlass::linked)                                 \
+  declare_constant(InstanceKlass::being_initialized)                      \
+  declare_constant(InstanceKlass::fully_initialized)                      \
+  declare_constant(InstanceKlass::initialization_error)                   \
                                                                           \
   /*********************************/                                     \
   /* Symbol* - symbol max length */                                       \
@@ -2342,12 +2289,12 @@
   declare_constant(Symbol::max_symbol_length)                             \
                                                                           \
   /*************************************************/                     \
-  /* constantPoolOop layout enum for InvokeDynamic */                     \
+  /* ConstantPool* layout enum for InvokeDynamic */                     \
   /*************************************************/                     \
                                                                           \
-  declare_constant(constantPoolOopDesc::_indy_bsm_offset)                 \
-  declare_constant(constantPoolOopDesc::_indy_argc_offset)                \
-  declare_constant(constantPoolOopDesc::_indy_argv_offset)                \
+  declare_constant(ConstantPool::_indy_bsm_offset)                 \
+  declare_constant(ConstantPool::_indy_argc_offset)                \
+  declare_constant(ConstantPool::_indy_argv_offset)                \
                                                                           \
   /********************************/                                      \
   /* ConstantPoolCacheEntry enums */                                      \
@@ -3167,8 +3114,13 @@
     }
     delete s;
   }
+  const char* start = NULL;
   if (strstr(typeName, "GrowableArray<") == typeName) {
-    const char * start = typeName + strlen("GrowableArray<");
+    start = typeName + strlen("GrowableArray<");
+  } else if (strstr(typeName, "Array<") == typeName) {
+    start = typeName + strlen("Array<");
+  }
+  if (start != NULL) {
     const char * end = strrchr(typeName, '>');
     int len = end - start + 1;
     char * s = new char[len];