resolClass не разрешает символьные ссылки - PullRequest
0 голосов
/ 04 октября 2019

JLS говорит, что метод resolClass должен проверять все символические ссылки

Эта спецификация обеспечивает гибкость реализации в отношении того, когда происходит связывание действий (и, из-за рекурсии, загрузки), при условии, что семантикаязык программирования Java соблюдается, что класс или интерфейс полностью проверены и подготовлены перед его инициализацией, и что ошибки, обнаруженные во время связывания, генерируются в той точке программы, где программа предпринимает некоторые действия, которые могут потребовать связи скласс или интерфейс, участвующий в ошибке.

Поэтому я попытался создать класс T, который ссылается на другой класс в первом проекте, и создал второй проект с пользовательским загрузчиком классов, загружая класс T, но не загружая другой, на который ссылаютсяclass.

public class T {
    public static AnotherClass field = new AnotherClass();
}
public class AnonClassLoader extends ClassLoader {

    public Class findClass(String str) {
        byte[] bytes = new byte[0];
        try {
            bytes = Files.readAllBytes(Paths.get(str));
        } catch (IOException e) {
            e.printStackTrace();
        }
        Class<?> aClass = defineClass(null, bytes, 0, bytes.length);
        return aClass;
    }

    public static void main(String[] args) throws IOException, NoSuchMethodException, IllegalAccessException,
        InvocationTargetException, InstantiationException, ClassNotFoundException {
        AnonClassLoader anonClassLoader = new AnonClassLoader();
        Class<?> aClass = anonClassLoader.loadClass("/Users/root/IdeaProjects/untitled/T.class", true);
        System.out.println(aClass.getName());
    }
}

Так что я ожидаю получить NoClassDefFound как можно скорее, но фактический результат - ошибки не выданы, класс успешно разрешен

1 Ответ

0 голосов
/ 06 октября 2019

Итак, в соответствии с идентификатором ошибки: JDK-8057777 Очистка старых и неиспользуемых интерфейсов виртуальных машин нет статического разрешения в точке доступа.

Между тем, в точка доступа нативная функция jdk 8 не имеет реализации

...