2011-03-03 53 views
1

可能重複:
Why is the finalize() method in java.lang.Object 「protected」?finalize方法

Finalize方法與受保護的範圍所限定,然後它是如何可能是一些其他對象,例如垃圾收集器是能夠稱之爲。

+1

雖然GC沒有使用這種機制(它按照它自己的規則來玩),只是因爲一個方法是私有的,並不意味着即使在類之外也不能執行它,請參閱AccessibleObject.setAccessible(布爾值);這也適用於訪問領域。訪問修飾符用於控制類的正常使用。 – MeBigFatGuy

回答

7

由於垃圾收集器是語言規範的一部分,因此可以執行語言規範說明的任何操作。

1

從Java語言規範的角度來看,該垃圾收集器不是一個對象,並且不被正常訪問規則。它是「JVM的一部分」,可以執行普通Java代碼無法做到的事情。 (的確,它可能根本就沒有實現爲Java代碼!)

想一想。如果要求GC符合訪問規則,則在標記階段將無法訪問對象的字段,因此無法確定對象是否可到達。換句話說,它不能滿足JLS對內存管理的要求。