class A {
protected void finalize() {
System.out.println("Destroyed");
}
}
public class Main {
public static void main(String[] args) {
A obj = new A();
obj = null;
System.out.println("End");
}
}
В Java метод Finalize() не всегда запускается до завершения программы.
Мои вопросы:
Когда именно происходит уничтожение объекта в Python и Java?
Есть ли в любом языке способ принудительного уничтожения объекта?
/>
Почему __del__ в Python в некоторых случаях ведет себя по-разному?
Я пытаюсь понять, как работает сбор мусора в Python и Java. Из того, что я знаю: [list] [*]Python использует подсчет ссылок + сборщик мусора
[*]Java использует автоматический сборщик мусора на основе JVM
[/list] Но меня смущает, когда объекты фактически уничтожаются на обоих языках. Например: [list] [*]Код Python [code]class A: def __del__(self): print("Destroyed")
obj = A() obj = None print("End") [/code] Иногда __del__ печатается сразу, а иногда нет (особенно при использовании циклических ссылок).
public class Main { public static void main(String[] args) { A obj = new A(); obj = null; System.out.println("End"); } } [/code] В Java метод Finalize() не всегда запускается до завершения программы.
[/list] Мои вопросы: [list] [*]Когда именно происходит уничтожение объекта в Python и Java?
[*]Есть ли в любом языке способ принудительного уничтожения объекта? /> [*]Почему __del__ в Python в некоторых случаях ведет себя по-разному?