Mercurial > hg > graal-jvmci-8
diff agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java @ 132:60b728ec77c1
6652736: well known classes in system dictionary are inefficiently processed
Summary: combine many scalar variables into a single enum-indexed array in SystemDictionary.
Reviewed-by: kvn
author | jrose |
---|---|
date | Tue, 29 Apr 2008 19:45:22 -0700 |
parents | a61af66fc99e |
children | 83c868b757c0 |
line wrap: on
line diff
--- a/agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java Tue Apr 29 19:40:51 2008 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java Tue Apr 29 19:45:22 2008 -0700 @@ -29,21 +29,27 @@ import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.types.OopField; // resolve ambiguity with oops.OopField + +// following needed for on-the-fly field construction: +import sun.jvm.hotspot.types.basic.BasicOopField; +import sun.jvm.hotspot.types.basic.BasicTypeDataBase; public class SystemDictionary { private static AddressField dictionaryField; private static AddressField sharedDictionaryField; private static AddressField placeholdersField; private static AddressField loaderConstraintTableField; - private static sun.jvm.hotspot.types.OopField javaSystemLoaderField; + private static OopField javaSystemLoaderField; private static int nofBuckets; - private static sun.jvm.hotspot.types.OopField objectKlassField; - private static sun.jvm.hotspot.types.OopField classLoaderKlassField; - private static sun.jvm.hotspot.types.OopField stringKlassField; - private static sun.jvm.hotspot.types.OopField systemKlassField; - private static sun.jvm.hotspot.types.OopField threadKlassField; - private static sun.jvm.hotspot.types.OopField threadGroupKlassField; + private static OopField wellKnownKlasses; + private static OopField objectKlassField; + private static OopField classLoaderKlassField; + private static OopField stringKlassField; + private static OopField systemKlassField; + private static OopField threadKlassField; + private static OopField threadGroupKlassField; static { VM.registerVMInitializedObserver(new Observer() { @@ -63,12 +69,20 @@ javaSystemLoaderField = type.getOopField("_java_system_loader"); nofBuckets = db.lookupIntConstant("SystemDictionary::_nof_buckets").intValue(); - objectKlassField = type.getOopField("_object_klass"); - classLoaderKlassField = type.getOopField("_classloader_klass"); - stringKlassField = type.getOopField("_string_klass"); - systemKlassField = type.getOopField("_system_klass"); - threadKlassField = type.getOopField("_thread_klass"); - threadGroupKlassField = type.getOopField("_threadGroup_klass"); + wellKnownKlasses = type.getOopField("_well_known_klasses[0]"); + objectKlassField = findWellKnownKlass("object_klass", type, db); + classLoaderKlassField = findWellKnownKlass("classloader_klass", type, db); + stringKlassField = findWellKnownKlass("string_klass", type, db); + systemKlassField = findWellKnownKlass("system_klass", type, db); + threadKlassField = findWellKnownKlass("thread_klass", type, db); + threadGroupKlassField = findWellKnownKlass("threadGroup_klass", type, db); + } + + private static OopField findWellKnownKlass(String indexName, Type type, TypeDataBase db) { + Address wkk = wellKnownKlasses.getStaticFieldAddress(); + int index = db.lookupIntConstant("SystemDictionary::#"+indexName).intValue(); + return new BasicOopField((BasicTypeDataBase)db, type, indexName, type, + true, index * db.getAddressSize(), wkk); } public Dictionary dictionary() {