Der Garbage Collector

Du kannst der VM höchstens einen Tip geben, aber verlassen darauf kannst und sollst Du Dich nicht.

Java:
System.gc();
 
So wie eine WC-Spülung ??????? 😀

Kurz: ja (System.gc() zB)

Lang: Nein
Der GC läuft wann er will. System.gc() ist lediglich eine Hint: Bitte lieber GC, könnest du nicht bitte den Müll runter bringen. Ob er dann auch wirklich läuft, ist nicht garantiert. Garantiert ist nur, dass der GC vor einer OutOfMemoryException läuft.
 
Zuletzt bearbeitet:
???:L

Warum passiert das im Forum immer wieder?

Man wirft dem Fragenden das Antipattern vor, er frißt es ohne nachzudenken und bedankt sich dafür. Warum war mir das von Anfang an klar?

Den GC zu triggern ist ein Anitpattern. Diskussionen dazu wurden schon häufig geführt (siehe Google und hier im Forum).

Nur ein Beispiel:
Der manuelle Aufruf von flush() sollte durch ein sauberes Design der Anwendung immer vermieden werden können und ist ähnlich zu bewerten wie ein manueller Aufruf von System. gc(), der eine manuelle Garbage Collection anfordert. In beiden Fällen verhindert man ein normales, optimiertes Arbeiten der Technologien.
Performance Anti-Patterns Teil 2: Flush und Clear Mapping Anti-Patterns

Hier wird der System.gc zwar nur als Beispiel aufgezählt (es geht um ähnliche Tricks im Umgang mit Hibernate), aber Google ist ja bekannt und es lässt sich noch mehr dazu finden.

Glaubst du wirklich die VM fährt gegen die Wand ohne zu bremsen?
 
@L-ectron-X das war ja auch ironisch gemeint 😉 Leider fehlt im Editor noch das Ironie-tag.

@FArt Also ich kann nicht erkennen das Joe oder ich ihm (dem Fragenden) das jetzt vorgeworfen hätten. Wir haben nur gesagt, das es diese Möglichkeit gibt, man sich aber darauf nicht verlassen kann und sollte.

@Stickman Du sollst bei Speicherproblemen eher Deine Programmierung betrachten, weil sich viele Speicherprobleme durch achtsames programmieren von vornherein nicht ergeben. Beispiel:

* Ist Dein Modell überhaupt geeignet für Deine Aufgabe?
* Verbrätst Du viele teure Objekte, statt sie zu leeren/resetten etc.?
* Werden erzeugte Objekte überhaupt genutzt?
* Schließt Du Buffer und Co. nach dem Benutzen?
* Strings richtig behandeln: (Nicht so) -> String s = new String("hallo welt!");

uns so weiter und so fort.

Ansonsten gibt es noch weitere Infos in Google, speziell zum Thema Speicher in Generation (young/old etc.) und Garbage Collection.
 
Man wirft dem Fragenden das Antipattern vor, er frißt es ohne nachzudenken und bedankt sich dafür. Warum war mir das von Anfang an klar?
Hehe... das alte Spiel:
- Auf keinen Fall den roten Knopf drücken!
- Jawohl, roter Knopf wird gedrückt...
 
@fastjack & der müde joe

Ihr habt euch schon deutlich ausgedrückt... aber "Tipp" und "Antwort: nein" werden (wie so oft) konsequent ignoriert, wenn es "Alternativen" gibt.

Du kannst wetten: bei den Antworten "richtig Lösung.... (+50 Zeilen)" und "Workaround: (+3 Zeilen)" kommt die Reaktion "super, diese Lösung (Workaround) habe ich gesucht. Das andere ist mir zu kompliziert und zu aufwendig. (Der letzte Zusatz wird meist nicht geschrieben sondern nur gedacht).

Ach, was solls... ich gehe lieber zum baden.
 

Zurück
Oben