title image


Smiley Nein, aber...
Du musst dafür sorgen, dass die Referenzen auf die Objekte irgendwann auch wieder freigegeben werden, damit der GarbageCollector die Objekte auch wirklich wegwerfen kann.In Java gibt es für echte Objekte (also nicht dieser Basisdatentypenschrott wie int usw.) nur Referenzen. Wenn Du z.B. schreibst,Object a = new Object();dann hast Du in a einen "Zeiger" auf das neue Object. Solange a erreichbar ist, bleibt Dein neues Object von der Müllabfuhr verschont. Verläßt Du aber den Kontext, z.B. durch beenden der Methode, dann gibt es keinen Weg mehr, auf das a zuzugreifen. Damit ist auch das Object unerreichbar. Und wenn dann der Speicher zur Neige geht oder auf Anforderung, dann kommt die GarbageCollection zum Zuge und entfernt das Object aus dem Speicher. So weit so gut. Aber wenn sich Objekte gegenseitig referenzieren, dann klappt das alles nicht mehr und der Speicher wird langsam aufgebraucht. Dafür wurden in Java 2 die sog. Weak-References eingeführt, die das Problem der gegenseitigen Referenz lösen: Stell Dir vor, A referenziert B und B referenziert A jeweils über eine solche schwache Referenz. Hast Du im Kontext keinen Zugriff mehr auf A und B, dann kann die GarbeCollection die erkennen, und wirft A und B weg, obwohl sie sich ja noch gegenseitig kennen! Schöne Sache, und damit verschwinden auch die meisten Speicherlecks aus Java.hth Frank

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: