Es hat sich die Frage ergeben nach welchen Regeln Java Objekte am Leben bleiben, also die Zeit bis sie fuer die Garbage Collection freigegeben und dann eingesammelt werden. Das offensichtliche ist natuerlich solange die Instanz eine Verbindung mit einem GC-Root Objekt hat wird es nicht eingesammelt. Innerhalb eines Methoden Koerpers haelt der Methoden-Aufruf selbst die Referenz. Also zum Beispiel:
Zu diesen Regeln habe ich aber keine feste Aussage oder Quelle gefunden. Es gibt viele Antworten auf Stack Overflow und anderen Seiten, aber keine davon hat eine Quellenangabe. In der JLS und der JVMS habe ich nichts dazu gefunden, die behandeln augenscheinlich die GC und Lebenszeit von Objekten gar nicht. Die Buecher die ich habe (Java ist auch eine Insel 8, Java Core Programmierung, Concurrency in Practice) enthalten da auch keine konkreten Aussagen.
Hat da jemand eine definitive Quelle fuer das Verhalten? Oder ist das ein Implementierungsdetail? Habe ich das irgendwo uebersehen?
Java:
public void test(Parameter parameter) {
// parameter lebt zumindest bis zum Ende der Funktion.
Etwas etwasInstanz = new etwasInstanz(); // Lebt bis zum Ende der Methode.
new EtwasInstanz(); // Kann sofort eingesammelt werden nachdem der Konstruktor von EtwasInstanz durch ist.
}
Zu diesen Regeln habe ich aber keine feste Aussage oder Quelle gefunden. Es gibt viele Antworten auf Stack Overflow und anderen Seiten, aber keine davon hat eine Quellenangabe. In der JLS und der JVMS habe ich nichts dazu gefunden, die behandeln augenscheinlich die GC und Lebenszeit von Objekten gar nicht. Die Buecher die ich habe (Java ist auch eine Insel 8, Java Core Programmierung, Concurrency in Practice) enthalten da auch keine konkreten Aussagen.
Hat da jemand eine definitive Quelle fuer das Verhalten? Oder ist das ein Implementierungsdetail? Habe ich das irgendwo uebersehen?