2009-08-22 6 views
0

J'ai une applet qui consomme beaucoup de mémoire. Si un utilisateur ouvre plusieurs onglets avec une page Web contenant l'applet, il obtient une exception OutOfMemoryException. Cela peut s'expliquer par le fait que les navigateurs n'utilisent qu'une seule instance d'une machine virtuelle. Est-ce que je peux empêcher cela?Beaucoup d'onglets de navigateur avec l'applet Java provoque OutOfMemoryException

Le OutOfMemoryException ne peut pas vraiment être pris, car il peut arriver (presque) partout ...

Répondre

1

Je recommande de faire un certain profil de l'applet pour voir ce que vous pouvez réduire la voilure, en supposant beaucoup d'ouverture des onglets avec l'applet est un cas d'utilisation standard. Vous aurez besoin de lancer l'applet très mince.

Vous pouvez également utiliser les méthodes de cycle de vie de l'applet plus à votre avantage. Lorsque la page de l'applet perd le focus, je crois que la méthode stop() de l'applet est appelée. Une fois que la page de l'applet est de nouveau affichée, start() doit être appelée. Vous pouvez utiliser la persistance du flux d'applets pour partager vos données en cours d'exécution sur les différents onglets, en les sauvegardant sur stop() et en les rechargeant sur start() ... pas sûr que ce soit une bonne solution, mais cela pourrait marcher. En dehors de "parce qu'ils le peuvent", y a-t-il une raison légitime pour qu'un utilisateur ait un groupe d'onglets avec votre applet en cours d'exécution? S'il ne s'agit que d'un cas de test lointain, vous voudrez peut-être faire ce que vous pouvez et documenter le problème.

Bonne chance.

+0

Je ne m'attends pas à ce que mes utilisateurs exécutent plus d'une applet, mais en effet, ils peuvent ... Je ne suis pas sûr d'arrêter et de commencer, mais cela ressemble à un travail plus compliqué qui pourrait causer plus de problèmes. J'ai vu que les navigateurs redémarrent tous les applets quand un OutOfMemoryError se produit. La mémoire est maintenant allouée à l'intérieur de la méthode init, donc j'attrape l'erreur maintenant et j'affiche un message d'erreur. Ce n'est même pas proche de la preuve complète, mais il montrera le message d'erreur (sauf si l'utilisateur est très impatient). – Jaap

Questions connexes