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.


Anmelden zum Antworten