snEADy

Aktuelles
Termine
Aufgabe
EAD-Contest
Downloads
*iBoard*
Kontakt
Links

Gästebuch
Aktuelles
snEADy - Board
 ° Home ° Antwort ° Statistik ° Registrierung ° Suchen ° FAQ ° Mitglieder °

snEADy - Board / Schlaue Schlange /

funktionsweise des garbage collectors

Autor Mitteilung
tthuem
registriert

Gesendet: 30 Mar 2005 23:35:26


hab mal ne frage, falls sich da jemand schon mal intensiver mit beschäftigt hat...

in java kann man ja nicht direkt speicher wieder freigeben. dafür ist ja der garbage collector da. ich habe mal gehört es hilft dem garbage collector wenn man seine variablen nach der "benutzung" auf null setzt. stimmt das? wenn ja, was heißt helfen? wird der speicher dann eher wieder freigegeben oder funktioniert die freigabe dann effizienter?

(vielleicht hilft das ja die zeit die der gc braucht zu verkürzen...)



roland
registriert

Gesendet: 31 Mar 2005 00:16:23


Also der GC arbeitet so: er hat eine Funktion, sagen wir die nennt sich "wunder". 'wunder' stellt fest, welche Instanz noch eine Referenz zu dem laufenden projekt hat. Das heißt, wenn du irgendwo in deiner Hauptklasse eine Referenz auf eine Instanz von einer anderen Klasse hast, und die hat wiederum viele instanzen drin usw.. stell dir nen Baum vor. Wenn du an irgendeiner Stelle jetzt nen Ast ab hackst (also die referenz änderst, z.B. auf NULL setzt), dann merkt das die Funktion 'wunder', und beim nächsten GC-durchlauf wird der nicht mehr erreichbare Teil des Speichers für "new" wieder freigegeben.
Wenn du irgendwo sonst noch eine Referenz auf deinen Speicherbereich hast, dann wird er natürlich nicht frei gegeben, da er ja noch von deindem Programm aus erreichbar ist.

Die sache wird etwas komplizierter wenn du mehrere Threads hast, aber das is echt ne eklige sache und brauchst du für snEADy sowieso nicht.

Also merk dir einfach: wenn du irgendwelche Instanzen auf keine Wiese mehr erreichen kannst, dann werden sie vom GC eingesammelt und frei getgeben. Wenn du also weißt dass du einen gewissen Teil deiner Daten nicht mehr brauchst, musst du nur alle Brücken (= referenzen) abreißen, und dann ist alles gut.

Gruß,
Roland

tthuem
registriert

Gesendet: 31 Mar 2005 11:28:37


schon mal danke für die erklärung!

wenn ich eine methode habe mit einer lokalen variable (nur in der methode sichtbar), dann macht es keinen sinn diese am ende der methode auf null zu setzen, richtig?

Strati
registriert

Gesendet: 31 Mar 2005 11:50:24


Richtig das macht keinen Sinn lokale Referenzen noch einmal auf NULL zu setzen, denn die werden am Ende der Methode sowieso als "Muell" deklariert und der GC raeumt sie beim naechsten Aufruf weg, wenn das moeglich ist.
Ansonsten unterstuetzt Du den GC, wenn Du eine Referenz auf NULL setzt, so dass die Methode "wunder" nicht mehr alles ueberpruefen muss und Du minimal Zeit gewinnen koenntest. Im Prinzip kannste Dir das aber schenken, denn der Gewinn ist so minimal, da gewisse Pruefungen sowieso gemacht werden, dass es sich nur bei wirklich komplexen Programmen lohnt, wenn ueberhaupt!
Konzentriere Dich lieber auf die eigentlichen Algorithmen und versuch effektiv zu programmieren.

Ihre Antwort

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL  Email Link  Abschalten *Was ist das?


Bei fremdsprachigen Postings beachten Sie den bei Ihnen installierten Zeichensatz!
 » Name  » Passwort 
 

Ladezeit (sec.): 0.107
Powered by miniBB 2.0 RC1g © 2001-2006
Kostenloses Forum

Um einen Eintrag zu schreiben müsst ihr euch als Nutzer des snEADy-iBoards registrieren!