Wie unterscheidet sich die Garbage Collection zwischen Python und Java und wann werden Objekte tatsächlich zerstört? [geJava

Java-Forum
Anonymous
 Wie unterscheidet sich die Garbage Collection zwischen Python und Java und wann werden Objekte tatsächlich zerstört? [ge

Post by Anonymous »

Ich versuche zu verstehen, wie Garbage Collection in Python vs. Java funktioniert.
Soweit ich weiß:
  • Python verwendet Referenzzählung + einen Garbage Collector
  • Java verwendet einen automatischen Garbage Collector basierend auf JVM
Aber ich bin verwirrt darüber, wann Objekte tatsächlich zerstört werden in beiden Sprachen.
Zum Beispiel:
  • Python-Code

    Code: Select all

    class A:
    def __del__(self):
    print("Destroyed")
    
    obj = A()
    obj = None
    print("End")
    
    Manchmal wird __del__ sofort gedruckt, manchmal nicht (insbesondere bei Verwendung von Zirkelverweisen).
  • Java-Code

    Code: Select all

    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");
    }
    }
    
    In Java wird die finalize()-Methode nicht immer ausgeführt, bevor das Programm endet.
Meine Fragen:
  • Wann genau findet die Objektzerstörung in Python und Java statt?
  • Gibt es in beiden Sprachen eine Möglichkeit, die Objektzerstörung zu erzwingen?
  • Warum verhält sich __del__ in Python in manchen Fällen anders?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post