Verhalten des Garbage Collectors bei sehr viel instanzierung von Objekten?
-
Hallo,
ich hab folgender Problematik! Eine Funktion erwartet ein Objekt von Typ X. diese funktion wird ständig augerufen und so auch jedes mal ein neues Objekt des Typ X instanziert! Wie geht der GC damit um, würde er nicht deterministisch arbeiten würde ja so der speicher voll laufen! Oder Sollte man Design- Technisch dieses Problem schon so lösen damit man nich immer wieder ein Objekt erzeugen muss? vll. ehr ein struktur die (nehm ich an ) auf dem Stack instanziert wird?
-
Der GC frisst alles das wo keine Referenz mehr darauf "zeigt".
Object test = new Object (); test = null; // ab jetzt gibt es keine Referenz mehr auf das vorher erstellte Objekt, der GC frisst es also beim nächsten Durchlauf private void tuWas (Object test) { //tu was } tuWas (new Object ()); // auf das Objekt zeigt nichts mehr der GC frisst es Object test = new Object (); tuWas (test); test = new Object (); // auf das zuvor erstellte Objekt zeigt nichts mehr der GC frisst es tuWas (test); ...
Ich hoffe das hilft, falls nicht stell etwas Beispielcode zu deiner Frage dazu
-
Der GC arbeitet nicht deterministisch, allerdings betreibt die Runtime einiges an Aufwand (=startet *zumindest* eine volle Collection) bevor sie eine OutOfMemoryException wirft.
----
Das bessere Design ist es meistens, ein neues Objekt zurückzugeben. Ein Objekt zu "recyclen" kann Sinn machen, ist aber eine Optimierung, und wie die meisten Optimierungen meist nicht sehr schön.