2
假設我有結構另一個內部類的內部子類 - 根類有多少個引用?
class A {
class B {}
class C extends B {}
}
似乎的C
實例應該有2所引用的根類A
:第一個從B
超類繼承的,第二個是自己的隱式內部類參考。我的問題:JVM(HotSpot)是否優化了這種情況,並只保留一個對根類的引用?
假設我有結構另一個內部類的內部子類 - 根類有多少個引用?
class A {
class B {}
class C extends B {}
}
似乎的C
實例應該有2所引用的根類A
:第一個從B
超類繼承的,第二個是自己的隱式內部類參考。我的問題:JVM(HotSpot)是否優化了這種情況,並只保留一個對根類的引用?
我對A.class進行了反編譯,得到了這個結果,它顯示了兩個對A的引用,一個來自B,另一個來自C.但這實際上意味着C實際上有兩個引用 - 一個是它自己的,另一個是從B繼承的。
class A {
class B {
final A this$0;
B() {
this$0 = A.this;
}
}
class C extends B {
final A this$0;
C() {
this$0 = A.this;
}
}
}
JVM並不需要嚴格遵循字節碼和浪費空間來確保2個相等的引用。 – leventov