JS Garbage Collection

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JS Garbage Collection

    Hallo liebe Experten,

    es geht um eine AJAX-basierte Webapplikation, die einmal geladen den ganzen Tag ohne Reload laufen soll. Im Firefox klappt das ganz prima, denn der hat einen 1A Garbage Collector. Der IE8 dagegen scheint sich bei jeder Aktion ein wenig mehr Speicher zu holen, gibt aber auch nach minutenlanger Wartezeit nichts wieder frei.

    Weiß jemand zufällig von vornherein schon, ob es beim IE ein bestimmtes Limit für die Speicherauslastung gibt, dass erstmal überschritten werden muss, damit der GC losläuft bzw. ob der IE überhaupt einen GC hat?

    Weiß jemand mit absoluter Sicherheit, ob ein massiver Einsatz von delete-Befehlen die Speicherauslastung runterdrückt? Bevor ich das jetzt mühsam teste, frag ich lieber mal ob jemand ad hoc weiß, ob und inwiefern sich das lohnen würde.

    (Bitte keine Diskussion wegen Barrierefreiheit anfangen, es handelt sich um eine Intranet-Lösung.)

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

  • #2
    Klar hat auch der IE, bzw. dessen JS-Engine, einen Garbage Collector.

    Allerdings ist der IE sehr viel anfälliger für "Memory Leaks". (Das galt zumindest für bisherige Versionen, ob sich da inzwischen beim 8er grundlegend etwas geändert hat, weiss ich zwar nicht, würde es jedoch erst mal aus Prinzip heraus bezweifeln.)

    Insb. "zirkuläre Referenzen" - also ein JS-Objekt, welches eine Referenz auf ein HTML-Objekt hält, welches dann seinerseits wiederum eine Referenz auf das JS-Objekt hält - waren in vergangegen IE-Versionen immer problematisch. Da weiss der GC einfach nicht, wann er sie wegräumen darf - und deshalb haben sie auch das Verlassen der Seite "überlebt". (Das ist der Grund, warum gängige Frameworks, die ein eigenes Modell zum Eventhandling mitbringen, meistens dafür sorgen, das beim Eintreten des Events beforeUnload dieser ganze Kram dann wieder "aufgeräumt" wird.)
    Und mit Closures gab es auch einige Probleme IIRC (schon etwas länger her, dass ich mich mit der Thematik mal etwas eingehender beschäftigt habe).

    Ob der Drip IE Leak Detector auch mit dem IE 8 noch zusammenarbeitet, kann ich dir nicht sagen, müsstest du ausprobieren.
    Unten unter "Additional Resources" findest du dort aber noch ein paar Seiten verlinkt, die sich der Problematik der Memory Leaks im IE detailierter widmen (bzw. sie auch allgemeiner betrachten, denn das Phänomen ist nicht total IE-spezifisch, tritt in ihm aber am massivsten auf).
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ich wäre selbst nicht darauf gekommen, dass sich das thematisch mit Memory Leaks überschneidet bzw. darauf beruht. Außerdem weiß ich jetzt, dass es wahrscheinlich schon reicht, am Ende der Objekt Lifetime die zirkulären Referenzen zu knacken.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar

      Lädt...
      X