| 

.NET C# Java Javascript Exception

0
Macht es Sinn bei Java 2 Micro Edition Objekte auf null zu setzen nachdem man sie nicht mehr braucht? Hilft das der Garbage-Collection?

Beispiel:
public void paint(Graphics g){
Grufics buffer = bufferImage.getGrahics();
...
buffer = null;
...
}


Oder wäre System.gc() besser, auch wenn da nichts garantiert wird?
27.09.2009
ermin 1,3k 2 7
ermin 1,3k 2 7
4 Antworten
2
Lokale Objektrefernzen auf null zu setzen ist unnötig, da sie nach dem Ende der Methode eh nicht mehr existieren.

Bei Instanzvariablen könnte es durchaus mal Sinn machen um den Spreicher ans System zurückzugeben, für die Zeit wo die Variablen nicht gebraucht werden. Ist aber auch eher unüblich.

Den GC anzufordern macht auch nicht viel Sinn, da er nach meiner Erfahrung von allein schon sehr zuverläßig läuft und vorher müßte man die Variablen ja auch auf null setzen, damit er was findet zum wegräumen.

Die Perfomance war bei der Einwicklung mit J2ME irgendwie auch immer meine kleinste Sorge.
28.09.2009
jenser78 131 1 2
0
Solange es noch Referenzen auf das Graphics-Objekt gibt, wird der Garbage Collector es auch nicht entfernen. Wenn du also den Garbage Collector manuell startest, musst du darauf achten die Variable (Referenz) buffer auf null zu setzen.
27.09.2009
clonejo 144 2 6
0
Der GarbageCollector läuft automatisch, aber erst nach verlassen einer Routine.
Wenn Du also 'zwischendrin' Speicher freimachen willst, dann musst Du ihm selber anstossen.

Wobei wirklich nur dann aufgeräumt wird, wenn nicht noch irgendwo auf die Objekte verwiesen wird.
Im Beispiel: bufferImage.getGrahics();
Wer weiss was in bufferImage noch alles gemacht/zwischengespeichert wird.
28.09.2009
DaSpors 4,2k 2 8
Dass der gc erst nach dem Verlassen einer Methode gerufen wird, ist mir neu und auch unverständlich, denn eine Methode läuft immer.
sml-ki 02.10.2009
0
Am besten die GC in Ruhe arbeiten lassen. Die Zeiten der manuellen Objekt-Finalisierung sollten vorbei sein. Sollte man den Drang verspüren, dem GC unter die Arme greifen zu müssen --> Klassendesign prüfen. Aus meiner Sicht gibt es KEINEN Grund solche "Tricks" anzuwenden. Aber ich schaue mir gerne konkrete Anwendungsfälle an.

Sollte man innerhalb der Methode zwischendurch den GC bemühen wollen, ist zu prüfen, ob die Methode nicht einfach zu lang ist.

Ich würde buffer = null weglassen. Wenn ich mein Sprachgefühl konsultierte, käme mir dies wie eine Alibi-Anweisung vor.
09.02.2011
oopexpert 455 1 8

Stelle deine Java-Frage jetzt!