В этом сценарии происходит загрузка дважды одного и того же класса внутри одного экземпляра JVM? - PullRequest
0 голосов
/ 04 января 2019

Класс B должен быть загружен тем же ClassLoader, что и класс A ( proof-link ).

class A {

   B fld = new B();

   void f() {
      B loc_var = new B();
   {

}

Но что произойдет, если класс B уже был загружен с другим загрузчиком классов раньше?

Любой класс загружается только один раз. Но классы, загружаемые разными загрузчиками clas, - это разные классы.

Итак, класс B будет загружен еще раз загрузчиком классов класса A, и два разных (!) Класса будут сосуществовать (в одном экземпляре JVM)?

1 Ответ

0 голосов
/ 04 января 2019

Зависит от того, что это за два этих ClassLoaders. JVM имеет три вида: загрузчик загрузчиков классов, загрузчик расширений классов и загрузчик классов приложений. При поиске класса сначала JVM будет искать в загрузчике загрузчика классов, а затем в расширении и приложении. Таким образом, если два ClassLoader различного типа, класс будет загружаться только один раз. Если два ClassLoader являются одновременно Application ClassLoader, он будет загружен дважды. Какой класс используется, зависит от ClassLoader вызывающего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...