我想了解爲什麼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