Чем отличается сбор мусора в Python и Java и когда объекты фактически уничтожаются? [закрыто]JAVA

Программисты JAVA общаются здесь
Anonymous
Чем отличается сбор мусора в Python и Java и когда объекты фактически уничтожаются? [закрыто]

Сообщение Anonymous »

Я пытаюсь понять, как работает сбор мусора в Python и Java.
Из того, что я знаю:
  • Python использует подсчет ссылок + сборщик мусора
  • Java использует автоматический сборщик мусора на основе JVM
Но меня смущает, когда объекты фактически уничтожаются на обоих языках.
Например:
  • Код Python

    Код: Выделить всё

    class A:
    def __del__(self):
    print("Destroyed")
    
    obj = A()
    obj = None
    print("End")
    
    Иногда __del__ печатается сразу, а иногда нет (особенно при использовании циклических ссылок).
  • Код Java

    Код: Выделить всё

    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 в некоторых случаях ведет себя по-разному?


Подробнее здесь: https://stackoverflow.com/questions/798 ... do-objects

Вернуться в «JAVA»