2017-01-24 5 views
1

Итак, предположим, что у меня есть банка с другой версией в папке ext, а другая версия находится в classpath. В какой версии будет загружена банка? Согласно моим исследованиям, поскольку extension classloader работает до classpath, так что библиотека в расширении будет загружена. Или это будет переопределение с classpath. И что будет, если версия одна и та же?Какая из банок будет загружена в JVM?

ответ

1

Он будет использовать первый класс, который он может найти в иерархии ClassLoader.

Так он будет пытаться получить класс из следующей последовательности ClassLoader с:

  1. Bootstrap ClassLoader состоит из классов Bootstrap (rt.jar и ряд других важных jar файлов на в jre/lib) ,
  2. Расширение ClassLoader состоит из Extension классов (jar файлов в папке расширения jre/lib/ext).
  3. Система ClassLoader состоит из Пользовательские классы (классы, расположенные в определенном классе).

Так как ваш класс не определен в # 1, но в # 2 и # 3, первый класс, который он может найти, будет в # 2, поэтому он получит версию папки расширения и просто проигнорирует тот, который определен позже в вашем пути к классам.

Смотрите также How Classes are Found

1

Это будет класс уровень не уровень Jar. Если класс (полное имя класса) уже загружен в vm, то новый класс класса ext или класса класса классов будет проигнорирован.

Смежные вопросы