Frage zum garbage collector
-
Angenommen ich habe 2 Objekte, die sich gegenseitig referenzieren, aber keine anderen Zeiger mehr auf diese Objekte, dh. praktisch keine Zugriffsmoeglichkeit mehr: Werden diese 2 Objekte dann von den Java-Muellmaennern kassiert oder bleibt sowas ewig liegen?
-
Laut Thinking in Java ist das je nach Implementierung des Garbage Collectors ein größeres oder kleineres Problem. Ich hab mal den passenden Abschnitt rauskopiert. Wenn du mehr wissen willst kannst du ja einfach das Ebook runterladen und das komplette Teilkapitel durchlesen.
http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip
Thinking in Java Kapitel 4: How a garbage collector works schrieb:
In faster schemes, garbage collection is not based on reference counting. Instead, it is based on the idea that any nondead object must ultimately be traceable back to a reference that lives either on the stack or in static storage. The chain might go through several layers of objects. Thus, if you start in the stack and the static storage area and walk through all the references, you’ll find all the live objects. For each reference that you find, you must trace into the object that it points to and then follow all the references in that object, tracing into the objects they point to, etc., until you’ve moved through the entire web that originated with the reference on the stack or in static storage. Each object that you move through must still be alive. Note that there is no problem with detached self-referential groups—these are simply not found, and are therefore automatically garbage.
-
Nobuo T schrieb:
Werden diese 2 Objekte dann von den Java-Muellmaennern kassiert oder bleibt sowas ewig liegen?
Die werden kassiert. Java kommt mit zyklischen Referenzen zurecht.
-
Cool, danke euch.
Gut zu wissen.