2009-08-22 6 views
0

Ich habe ein Applet, das ziemlich viel Speicher konsumiert. Wenn ein Benutzer mehrere Registerkarten mit einer Webseite öffnet, die das Applet enthält, erhalten sie eine OutOfMemoryException. Dies kann durch die Tatsache erklärt werden, dass Browser nur eine Instanz einer virtuellen Maschine verwenden. Kann ich das irgendwie verhindern?Viele Browser-Registerkarten mit Java-Applet verursacht OutOfMemoryException

Die OutOfMemoryException kann nicht wirklich gefangen werden, da es (fast) überall passieren kann ...

Antwort

1

ich dabei einige Profilierung des Applet würde empfehlen, um zu sehen, was Sie trimmen können, öffnen viele Tabs unter der Annahme, mit dem Applet ist ein Standard-Anwendungsfall. Sie müssen das Applet sehr schlank ausführen.

Sie können auch die Applet-Lebenszyklus-Methoden mehr zu Ihrem Vorteil verwenden. Wenn die Applet-Seite den Fokus verliert, glaube ich, dass die stop() -Methode des Applets aufgerufen wird. Sobald die Applet-Seite wieder angezeigt wird, sollte start() aufgerufen werden. Sie können die Persistenz des Applet-Streams verwenden, um Ihre laufenden Daten über die verschiedenen Registerkarten zu teilen, sie bei stop() zu speichern und sie bei start() wieder zu laden ... nicht sicher, dass dies eine großartige Lösung ist, aber es könnte funktionieren.

Anders als "weil sie können" gibt es irgendeinen legitimen Grund für einen Benutzer, eine Reihe von Tabs mit Ihrem Applet in jedem laufen zu haben? Wenn es sich nur um einen Testfall handelt, der weit verbreitet ist, möchten Sie vielleicht nur das tun, was Sie können, und dann das Problem dokumentieren.

Viel Glück.

+0

Ich erwarte nicht, dass meine Benutzer mehr als 1 Applet ausführen, aber in der Tat können sie ... Ich bin nicht sicher über Stop und Start, aber es klingt wie kompliziertere Arbeit, die letztlich mehr Probleme verursachen könnte. Ich habe gesehen, dass Browser alle Applets neu starten, wenn ein OutOfMemoryError auftritt. Der Speicher ist jetzt in der Init-Methode zugeordnet, so dass ich den Fehler jetzt abfangen und eine Fehlermeldung anzeigen. Dies ist nicht einmal annähernd der vollständige Beweis, aber es wird die Fehlermeldung angezeigt (es sei denn, der Benutzer ist sehr ungeduldig). – Jaap

Verwandte Themen