Index: src/jdk.jdi/share/classes/com/sun/tools/jdi/ClassLoaderReferenceImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- src/jdk.jdi/share/classes/com/sun/tools/jdi/ClassLoaderReferenceImpl.java (revision 58628:36500e80f6f177f85582c873f1e9947d47d54dc2) +++ src/jdk.jdi/share/classes/com/sun/tools/jdi/ClassLoaderReferenceImpl.java (revision 58628+:36500e80f6f1+) @@ -103,16 +103,22 @@ Type findType(String signature) throws ClassNotLoadedException { List types = visibleClasses(); - Iterator iter = types.iterator(); - while (iter.hasNext()) { - ReferenceType type = iter.next(); + + // first check already loaded classes and possibly avoid massive signature retrieval later + for (ReferenceType type : vm.classesBySignature(signature)) { + if (types.contains(type)) { + return type; + } + } + + for (ReferenceType type : types) { if (type.signature().equals(signature)) { return type; } } - JNITypeParser parser = new JNITypeParser(signature); - throw new ClassNotLoadedException(parser.typeName(), - "Class " + parser.typeName() + " not loaded"); + + String typeName = new JNITypeParser(signature).typeName(); + throw new ClassNotLoadedException(typeName, "Class " + typeName + " not loaded"); } byte typeValueKey() { Index: src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java (revision 58628:36500e80f6f177f85582c873f1e9947d47d54dc2) +++ src/jdk.jdi/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java (revision 58628+:36500e80f6f1+) @@ -317,12 +317,16 @@ public List classesByName(String className) { validateVM(); - String signature = JNITypeParser.typeNameToSignature(className); + return classesBySignature(JNITypeParser.typeNameToSignature(className)); + } + + List classesBySignature(String signature) { + validateVM(); List list; if (retrievedAllTypes) { - list = findReferenceTypes(signature); + list = findReferenceTypes(signature); } else { - list = retrieveClassesBySignature(signature); + list = retrieveClassesBySignature(signature); } return Collections.unmodifiableList(list); }