diff --git a/src/share/vm/prims/jvmtiGetLoadedClasses.cpp b/src/share/vm/prims/jvmtiGetLoadedClasses.cpp index 70aede5..381868b 100644 --- a/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +++ b/src/share/vm/prims/jvmtiGetLoadedClasses.cpp @@ -42,7 +42,13 @@ void do_klass(Klass* k) { // Collect all jclasses - _classStack.push((jclass) _env->jni_reference(k->java_mirror())); + // DCEVM : LoadedClassesClosure in dcevm7 iterates over classes from SystemDictionary therefore the class "k" is always + // the new version (SystemDictionary stores only new versions). But the LoadedClassesClosure's functionality was + // changed in java8 where jvmtiLoadedClasses collects all classes from all classloaders, therefore we + // must use new versions only. + if (k->new_version()==NULL) { + _classStack.push((jclass) _env->jni_reference(k->java_mirror())); + } } int extract(jclass* result_list) {