好吧,疯狂的想法。
您可以在您描述的线程中使用相同的技术,尝试不同的方法。类ClassLoader有如下方法:
private Class<?> findBootstrapClassOrNull(String name)
此方法调用原生方法:
private native Class<?> findBootstrapClass(String name)
您也可以尝试使其易于访问。
编辑:我尝试了以下代码,但从应用程序类加载器运行:
public class MyClassLoader extends ClassLoader {
public static void main(String[] args)
throws NoSuchMethodException,
InvocationTargetException,
IllegalAccessException {
Method method = ClassLoader.class.getDeclaredMethod(
"findBootstrapClass", String.class);
method.setAccessible(true);
MyClassLoader cl = new MyClassLoader();
System.out.println(method.invoke(cl, "java.lang.String"));
System.out.println(method.invoke(cl, "sun.java2d.loops.GraphicsPrimitiveMgr$2"));
}
}
(顺便说一句,这段代码不必扩展 ClassLoader,我只是在之前的测试中从 ClassLoader 调用受保护的方法时留下了它。)
无论我提供什么类,在我的 main 方法运行时,似乎几乎所有内容都已加载,不确定。从“findBootstrapClass”方法的源代码中,我看到了这个:
/**
* Returns a class loaded by the bootstrap class loader;
* or return null if not found.
*/
private Class<?> findBootstrapClassOrNull(String name)
因此,除非您在检测代码时得到不同的运行结果,否则我认为这可能是不可行的。
注意:同样,我查看的源代码适用于 OpenJDK 1.8
祝你好运。