Хорошо, безумная идея.
Вы можете использовать ту же технику в описанном вами потоке, попробовав другой метод. Класс ClassLoader имеет следующий метод:
private Class<?> findBootstrapClassOrNull(String name)
Этот метод вызывает собственный метод:
private native Class<?> findBootstrapClass(String name)
Который вы также можете попытаться сделать доступным.
EDIT: I Тем не менее, я пробовал следующий код, запущенный из загрузчика классов приложения:
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.)
Какие бы классы я ни предоставлял, в момент запуска моего основного метода кажется, что почти все загружено, не уверен. Из исходного кода для метода findBootstrapClass я вижу следующее:
/**
* Returns a class loaded by the bootstrap class loader;
* or return null if not found.
*/
private Class<?> findBootstrapClassOrNull(String name)
Итак, если вы не получите другой результат во время инструментирования кода, я думаю, возможно, это невыполнимо. .
ПРИМЕЧАНИЕ: опять же, исходный код, который я просмотрел, предназначен для OpenJDK 1.8
Удачи.