# Objekte null setzen?



## Cinimod (20. Dez 2003)

Hallo!

Angenommen ich habe einer Methode, in der zwanzig String Objekte erstellt werden z.B.


```
public void method() {

for(int i=0; i<20; i++) {
 String einString = "Ein Text";
}
}
```

Reicht es jetzt aus, auf den Garbage Collector zu vertrauen, oder ist es besser (performanter?)
zu schreiben:

String ein String = "Ein Text";
einString = null;

Für Antworten vielen Dank im voraus!


----------



## inflamer (28. Dez 2003)

also in dem fall kann man sich auf den gc [noch] verlassen


----------



## stev.glasow (28. Dez 2003)

wieso "noch" - kann man sich nicht immer auf den gc verlassen?


----------



## marsias (28. Dez 2003)

hi!

soweit ich weiß kann man sich nicht immer auf den gc verlassen.
Es kann durchaus vorkommen das der gc etwas nicht säubert.

Es ist wohl besser die nicht benötigten Objekte auf null zu setzten,
weil man dadurch dem gc signalisiert das das Objekt nicht mehr benötigt wird.
Sonst ist es ja dem gc überlassen darüber zu entscheiden.

mfg


----------



## jptc.org (6. Jan 2004)

tja und beim obigen Code kommt noch etwas mehr zum tragen. der String _"Ein Text"_ wird nur einmal erzeugt und im Speicher (im Stringpool) abgelegt. Alle Zuweisungen in der Schleifen referenzieren das gleiche Stringobjekt, d.h. es wird nur einmal Speicher belegt. Es wird nur ein wirklich neues Objekt (nicht aus dem Stringpool) angelegt, wenn man new String("Ein Text") benutzt. Das Ganze noch verknüpft mit dem Immutable Pattern verdeutlicht die Eigenschaften der Stringklasse.

Karsten Voigt
http://www.java-performance-portal.org


----------



## Vatar (19. Feb 2004)

```
MeineKlasse hallo_ref = new MeineKlasse(2);
hallo_ref = new MeineKlasse (3);
```

oder ist es besser wenn man schreibt


```
MeineKlasse hallo_ref = new MeineKlasse(2);
hallo_ref = bull;
hallo_ref = new MeineKlasse (3);
```


----------



## Beni (19. Feb 2004)

Du willst zuerst null zuweisen, und danach eine neue Referenz, anstatt direkt?

Das hört sich doch irgendwie komplizierter an ???:L
Irgendwie wie ein Schritt zuviel :wink:

mfg Beni


----------



## Guest (20. Feb 2004)

Hm, kann mir mal jemand erklären, weshalb der gc nicht alles "säubern" sollte, was zu säubern ist? Die Gültigkeit der Variable ist doch spätestens am Ende des aktuellen Blocks ebenfalls zu Ende, und das erkennt der gc garantiert - da bleibt doch nix übrig? Das "null"-Setzen ist also für den gc völlig überflüssig.


----------

