JVMが特定のクラスを必要としないときにロードすることを決定する理由を理解しようとしています。次のコード例を考えてみましょう:Java ClassLoaderがこのクラスをロードする理由
public class Foo {
public void foo() {
}
static class Bar {
}
public Bar bar() {
return new Bar();
}
}
new Foo().foo()
を呼び出すときに、それが必要ではないですから、Bar
は、クラスローダによってロードされていません。我々は、サブクラスのインスタンスを返すbar
持っている例を変更した場合でも、:new Foo().foo()
を呼び出す
public class Foo {
public void foo() {
}
static class Bar {
}
static class BigBar extends Bar {
}
public Bar bar() {
return new BigBar();
}
}
は、それらのいずれも必要とされているにもかかわらず、両方Bar
とBigBar
クラスをロードするクラスローダの原因となります。どうして?
この特定のシナリオの他に、JVMが一般にクラスをロードする必要があると判断する理由を知る方法はありますか?新しいJVMがJavaのMyMainClassを入力することで、起動するたびにここで
あなたの質問は謎です。 JDK8をお持ちの場合は、JDK8が使用されます。同時に2つのJDKを使用することはできません。 –
'-target 1.7'でコードをコンパイルし、7バージョンのJREでどのように動作するかテストしましたか?これは、クラスローダーが何をしているのかを推測するのではなく、それがどのように処理するのかを見るためのより単純な方法です。 – Kayaman
@JoshStoneどのコードですか?どちらのクラス? 「いくつかのコードはJava 8からいくつかのクラスを読み込もうとしています。 – Kayaman