Почему в стеке появляется sun.misc.Launcher $ AppClassLoader.loadClass - PullRequest
0 голосов
/ 19 октября 2018

Я инструментировал JDK и приложение.Точки входа и выхода записываются для построения графа вызовов.

График вызовов выглядит как

sun.misc.Launcher $ AppClassLoader.loadClass-> com.example.Main.main
-> sun.misc.Launcher $ AppClassLoader.loadClass-> com.example.Foo.foo

Исходный код

public class Main{
public static void main(String[] args){
  Foo.foo()
}
}

public class Foo{
  public static void foo(){};
}

Это должно быть так, как работает загрузчик классов, но яв байт-коде не отображается ничего, что указывает на сайт вызова "sun.misc.Launcher $ AppClassLoader.loadClass".Итак, как работает classloader внутри?

1 Ответ

0 голосов
/ 19 октября 2018

Классы загружаются лениво.

Вы можете убедиться в этом, написав код для печати на консоль в статических инициализаторах.

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

В первые дни апплеты устанавливали сетевое соединение для каждогофайл класса.

...