hotspot/agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java
author never
Mon, 05 Sep 2011 17:09:05 -0700
changeset 10517 f92c9ff3a15f
parent 7662 5f31baaff55b
child 11628 13155c0c00b4
permissions -rw-r--r--
7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244) Reviewed-by: kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
7662
5f31baaff55b 7010068: Update all 2010 Oracle-changed OpenJDK files to have the proper copyright dates - first pass
trims
parents: 5547
diff changeset
     2
 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4571
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4571
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4571
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
package sun.jvm.hotspot.memory;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
import java.util.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
import sun.jvm.hotspot.debugger.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
import sun.jvm.hotspot.oops.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
import sun.jvm.hotspot.runtime.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
import sun.jvm.hotspot.types.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
public class SystemDictionary {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
  private static AddressField dictionaryField;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
  private static AddressField sharedDictionaryField;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
  private static AddressField placeholdersField;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
  private static AddressField loaderConstraintTableField;
394
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    38
  private static sun.jvm.hotspot.types.OopField javaSystemLoaderField;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  private static int nofBuckets;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
394
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    41
  private static sun.jvm.hotspot.types.OopField objectKlassField;
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    42
  private static sun.jvm.hotspot.types.OopField classLoaderKlassField;
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    43
  private static sun.jvm.hotspot.types.OopField stringKlassField;
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    44
  private static sun.jvm.hotspot.types.OopField systemKlassField;
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    45
  private static sun.jvm.hotspot.types.OopField threadKlassField;
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    46
  private static sun.jvm.hotspot.types.OopField threadGroupKlassField;
10517
f92c9ff3a15f 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 7662
diff changeset
    47
  private static sun.jvm.hotspot.types.OopField methodHandleKlassField;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
  static {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
    VM.registerVMInitializedObserver(new Observer() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
        public void update(Observable o, Object data) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
          initialize(VM.getVM().getTypeDataBase());
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
      });
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  private static synchronized void initialize(TypeDataBase db) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
    Type type = db.lookupType("SystemDictionary");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
    dictionaryField = type.getAddressField("_dictionary");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
    sharedDictionaryField = type.getAddressField("_shared_dictionary");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
    placeholdersField = type.getAddressField("_placeholders");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
    loaderConstraintTableField = type.getAddressField("_loader_constraints");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
    javaSystemLoaderField = type.getOopField("_java_system_loader");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
    nofBuckets = db.lookupIntConstant("SystemDictionary::_nof_buckets").intValue();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
4571
80b553bddc26 6914300: ciEnv should export all well known classes
never
parents: 670
diff changeset
    67
    objectKlassField = type.getOopField(WK_KLASS("Object_klass"));
80b553bddc26 6914300: ciEnv should export all well known classes
never
parents: 670
diff changeset
    68
    classLoaderKlassField = type.getOopField(WK_KLASS("ClassLoader_klass"));
80b553bddc26 6914300: ciEnv should export all well known classes
never
parents: 670
diff changeset
    69
    stringKlassField = type.getOopField(WK_KLASS("String_klass"));
80b553bddc26 6914300: ciEnv should export all well known classes
never
parents: 670
diff changeset
    70
    systemKlassField = type.getOopField(WK_KLASS("System_klass"));
80b553bddc26 6914300: ciEnv should export all well known classes
never
parents: 670
diff changeset
    71
    threadKlassField = type.getOopField(WK_KLASS("Thread_klass"));
80b553bddc26 6914300: ciEnv should export all well known classes
never
parents: 670
diff changeset
    72
    threadGroupKlassField = type.getOopField(WK_KLASS("ThreadGroup_klass"));
10517
f92c9ff3a15f 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 7662
diff changeset
    73
    methodHandleKlassField = type.getOopField(WK_KLASS("MethodHandle_klass"));
379
10767ca40189 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 1
diff changeset
    74
  }
10767ca40189 6652736: well known classes in system dictionary are inefficiently processed
jrose
parents: 1
diff changeset
    75
394
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    76
  // This WK functions must follow the definitions in systemDictionary.hpp:
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    77
  private static String WK_KLASS(String name) {
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    78
      //#define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    79
      return ("_well_known_klasses[SystemDictionary::"+WK_KLASS_ENUM_NAME(name)+"]");
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    80
  }
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    81
  private static String WK_KLASS_ENUM_NAME(String kname) {
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    82
      //#define WK_KLASS_ENUM_NAME(kname)    kname##_knum
c33507c3ac75 6701024: SAJDI functionality is broken
jrose
parents: 379
diff changeset
    83
      return (kname+"_knum");
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
  public Dictionary dictionary() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
    Address tmp = dictionaryField.getValue();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
    return (Dictionary) VMObjectFactory.newObject(Dictionary.class, tmp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
  public Dictionary sharedDictionary() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
    Address tmp = sharedDictionaryField.getValue();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
    return (Dictionary) VMObjectFactory.newObject(Dictionary.class, tmp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  public PlaceholderTable placeholders() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
    Address tmp = placeholdersField.getValue();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
    return (PlaceholderTable) VMObjectFactory.newObject(PlaceholderTable.class, tmp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  public LoaderConstraintTable constraints() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
    Address tmp = placeholdersField.getValue();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
    return (LoaderConstraintTable) VMObjectFactory.newObject(LoaderConstraintTable.class, tmp);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
  // few well known classes -- not all are added here.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  // add more if needed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
  public static InstanceKlass getThreadKlass() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
    return (InstanceKlass) newOop(threadKlassField.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
  public static InstanceKlass getThreadGroupKlass() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
    return (InstanceKlass) newOop(threadGroupKlassField.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
  public static InstanceKlass getObjectKlass() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
    return (InstanceKlass) newOop(objectKlassField.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  public static InstanceKlass getStringKlass() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
    return (InstanceKlass) newOop(stringKlassField.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
  public static InstanceKlass getClassLoaderKlass() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
    return (InstanceKlass) newOop(classLoaderKlassField.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
  public static InstanceKlass getSystemKlass() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
    return (InstanceKlass) newOop(systemKlassField.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
10517
f92c9ff3a15f 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 7662
diff changeset
   132
  public static InstanceKlass getMethodHandleKlass() {
f92c9ff3a15f 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 7662
diff changeset
   133
    return (InstanceKlass) newOop(methodHandleKlassField.getValue());
f92c9ff3a15f 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 7662
diff changeset
   134
  }
f92c9ff3a15f 7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
never
parents: 7662
diff changeset
   135
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  public InstanceKlass getAbstractOwnableSynchronizerKlass() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
    return (InstanceKlass) find("java/util/concurrent/locks/AbstractOwnableSynchronizer",
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
                                null, null);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
  public static Oop javaSystemLoader() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
    return newOop(javaSystemLoaderField.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
  public static int getNumOfBuckets() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
    return nofBuckets;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
  private static Oop newOop(OopHandle handle) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
    return VM.getVM().getObjectHeap().newOop(handle);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  /** Lookup an already loaded class. If not found null is returned. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
  public Klass find(String className, Oop classLoader, Oop protectionDomain) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
    Symbol sym = VM.getVM().getSymbolTable().probe(className);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
    if (sym == null) return null;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
    return find(sym, classLoader, protectionDomain);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
  /** Lookup an already loaded class. If not found null is returned. */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
  public Klass find(Symbol className, Oop classLoader, Oop protectionDomain) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
    Dictionary dict = dictionary();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
    long hash = dict.computeHash(className, classLoader);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
    int index = dict.hashToIndex(hash);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
    return dict.find(index, hash, className, classLoader, protectionDomain);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
  /** Interface for iterating through all classes in dictionary */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
  public static interface ClassVisitor {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
    public void visit(Klass k);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
  /** Interface for iterating through all classes and their class
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
      loaders in dictionary */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
  public static interface ClassAndLoaderVisitor {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
    public void visit(Klass k, Oop loader);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
  /** Iterate over all klasses - including object, primitive
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
      array klasses */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  public void allClassesDo(final ClassVisitor v) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
    ClassVisitor visitor = new ClassVisitor() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
      public void visit(Klass k) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
        for (Klass l = k; l != null; l = l.arrayKlassOrNull()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
          v.visit(l);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
    };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
    classesDo(visitor);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
    VM.getVM().getUniverse().basicTypeClassesDo(visitor);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
  /** Iterate over all klasses in dictionary; just the classes from
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
      declaring class loaders */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
  public void classesDo(ClassVisitor v) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
    dictionary().classesDo(v);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
  /** All classes, and their class loaders */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
  public void classesDo(ClassAndLoaderVisitor v) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
    dictionary().classesDo(v);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
  /** All array classes of primitive type, and their class loaders */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
  public void primArrayClassesDo(ClassAndLoaderVisitor v) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
    placeholders().primArrayClassesDo(v);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
}