Чем отличается сбор мусора в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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