метод finalize в Java

Возможный дубликат:
Почему метод finalize () в java.lang.Object защищен?

Метод finalize определяется с защищенной областью, тогда как это возможно, что какой-либо другой объект, такой как сборщик мусора, может вызвать его.


person shreyasva    schedule 03.03.2011    source источник
comment
хотя GC не использует этот механизм (он играет по своим собственным правилам), только потому, что метод является частным, не означает, что вы не можете выполнить его даже извне класса, см. AccessibleObject.setAccessible (boolean); Это также относится к полям доступа. Модификаторы доступа предназначены для управления разумным использованием класса.   -  person MeBigFatGuy    schedule 03.03.2011


Ответы (4)


Потому что сборщик мусора является частью спецификации языка и, таким образом, может делать все, что указано в спецификации языка.

person Jörg W Mittag    schedule 03.03.2011

protected - это не то же самое, что private, и сборщик мусора мог бы получить к нему доступ, даже если бы он был частным.

Почему в java.lang используется метод finalize (). Объект защищен?

person Brandon Frohbieter    schedule 03.03.2011


С точки зрения спецификации языка Java, сборщик мусора не является объектом и не регулируется обычными правилами доступа. Он является «частью JVM» и может делать то, чего не может делать обычный Java-код. (На самом деле, вероятно, он вообще не реализован как Java-код!)

Подумай об этом. Если бы сборщик мусора должен был соответствовать правилам доступа, он не смог бы получить доступ к private полям объектов во время фазы отметки и, следовательно, не мог бы определить, достижимы ли объекты. Другими словами, он не сможет выполнить требования JLS для управления памятью.

person Stephen C    schedule 03.03.2011