PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Style-Frage oder geht das eh and den GC?



milanaasde
13-04-2005, 10:18
Habe mal eine "Form" oder auch Style Frage:

Angenommen jenes einfach beispiel:



public class Test{
public static void main(String[]args){
this.blaBlub();
sleep(1000);
}


public void blaBlub(){
Vector einSpeicherFressenderVector = new Vector();
}

}

Ok, sehr simple..
aber was ich fragen wollte, (da bin ich mir nicht ganz sicher, wie sich das verhält) was ist mit dem Vector in diesem Beispeil, nach verlassen der Methode?
Bleibt der erhalten, bis das Programm endet, oder ist er frei für den GC?
Oder sollte man denn noch mit



public void blaBlub(){
Vector einSpeicherFressenderVector = new Vector();
einSpeicherFressenderVector=null;
}


den Speicher wieder Freigeben?

Ich weis hier jetzt nicht gerade sinnvoll, aber bei Grossen Projekten auf LiveSystemen, wo jegliche Performance gefragt ist, ist das ja schon was anderes..

Schonmal im Vorfeld Danke

anda_skoa
13-04-2005, 12:13
Mal abgesehen davon, daß das nicht kompilieren wird weil blaBlub nicht static ist :D

Der Garbage Collector darf alles einsammeln, worauf keine Referenz mehr besteht (oder nur mehr weak references)

D.h. da in deinem Fall die letzte Referenz beim Verlassen der Methode blaBlub() entfernt wird (der Gültigkeitsbereich der lokalen Variable ist ja zu Ende), ist der Vektor wieder frei.

Wenn Performance eine Rolle spielt, ist es bei großen Speicherelementen oft ratsam, sich eventuell die Wiederverwendung des selben Elements zu überlegen.
Zum Beispiel wenn blaBlub() später nochmal aufgerufen werden sollte, vielleicht sogar periodisch, dann könnte man den selben Vektor benutzen (solange keine multitthreading Sachen gemacht werden)

Immer im Hinterkopf behalten, das Objectcreation eine der teuersten Operationen ist.

Ciao,
_

RogerJFX
13-04-2005, 15:40
was denn? Der Vector ist ja eh nur auf dem Stack. Der ist schneller wech, als Du gucken kannst.

RogerJFX
13-04-2005, 15:44
leg ihn auf den Heap, und er ist wech, sobald keine Referenz mehr besteht auf die Klasse, in der er steht.

Ganz einfach. Solange eine Instanz der Klasse irgendjemandem bekannt ist, bleibt dann auch der Vector. Es sei denn, Du machst ihn selbst platt. Das merkt dann auch der GC.