Я пытаюсь понять, почему JVM решает загрузить определенные классы, когда это не кажется необходимым. Рассмотрим следующий пример кода:Почему Java ClassLoader загружает этот класс
public class Foo {
public void foo() {
}
static class Bar {
}
public Bar bar() {
return new Bar();
}
}
При вызове new Foo().foo()
, Bar
не нагруженный загрузчиком классов, так как он не нужен. Но, если мы изменим пример, чтобы bar
вернуть экземпляр суб-класса:
public class Foo {
public void foo() {
}
static class Bar {
}
static class BigBar extends Bar {
}
public Bar bar() {
return new BigBar();
}
}
Вызов new Foo().foo()
вызывает загрузчик классов загрузить оба Bar
и BigBar
классы, хотя ни один из них необходимы. Зачем?
Помимо этого конкретного сценария, есть ли способ узнать, почему JVM решает, что ему нужно загрузить класс в целом?
Ваш вопрос загадочный. Если у вас JDK8, JDK8 будет использоваться. Вы не можете одновременно использовать 2 JDK. –
Вы скомпилировали код с '-target 1.7' и проверили, как он работает на 7-й версии JRE? Это было бы более прямым способом увидеть, как он обрабатывается, а не гадать, что делает загрузчик классов. – Kayaman
@JoshStone Какой код? Какие классы? «Некоторый код пытается загрузить некоторые классы из Java 8» не дает много работы. – Kayaman