2010-04-14 7 views
6

Je viens de redémarrer mon navigateur web firefox parce qu'il a commencé à bégayer et à ralentir. Cela se produit tous les deux jours en raison de (ma compréhension) de l'utilisation excessive de la mémoire. J'ai remarqué qu'il prend 40M quand il commence et puis, au moment où je remarque ralentir, il va à 1G et ma machine n'a rien à offrir à moins que je ferme d'autres applications. J'essaie de comprendre les raisons techniques derrière pourquoi son problème si difficile à résoudre ve.Utilisation élevée de la mémoire pour les nuls

Mozilla ont une page sur l'utilisation de la mémoire haute:

http://support.mozilla.com/en-US/kb/High+memory+usage

Mais je suis à la recherche d'un peu plus en profondeur et une explication satisfaisante. Pas super technique mais assez pour donner plus de respect à la question et s'il vous plaît la foule ici.

Quelques questions que je suis déjà méditant (ils pourraient être stupide si facile de prendre):

  • Quand je ferme tous les onglets, pourquoi ne va pas l'utilisation de la mémoire tout en bas?
  • Pourquoi l'utilisation de la mémoire des extensions/thèmes/plugins n'est-elle pas limitée?
  • Pourquoi l'utilisation de la mémoire augmente-t-elle si elle reste ouverte pendant de longues périodes?
  • Pourquoi les fuites de mémoire sont-elles si difficiles à trouver et à résoudre?

App et réponses agnostiques de langue également très appréciés.

+0

cette question est un peu large. Firefox souffre de fuites de mémoire, il est préférable pour vous de lire sur ce sujet. La fermeture des onglets ne libère pas nécessairement la mémoire allouée à cet onglet. –

+1

et votre question de programmation est? – KevinDTimm

+1

@KevinDTimm c'est que la dernière balle dans la liste – David

Répondre

10

Les navigateurs sont comme les gens - ils vieillissent, ils obtiennent pléthorique, et ils se plaquer pour les modèles plus jeunes et plus maigres. Firefox n'est pas seulement un navigateur, c'est un écosystème. Bien que je pense que les versions récentes sont assez gonflées, le produit de base est généralement stable.

Cependant, firefox est un écosystème/plate-forme pour:

1) plug-ins mal écrite

2) code JavaScript mal écrite qui exécute en son sein. 3) Adobe flash en tant que plate-forme pour la vidéo poids lourd et pour les scripts publicitaires mal écrits tels que 'frapper Oussama ben Laden avec un canard pour réduire votre taux hypothécaire et recevoir un iPod gratuit * (participation requise).

4) Quicktime et autre lecteur multimédia.

5) Du code Java intégré.

La description d'une fuite de mémoire suggère un script exécutant un code malveillant ou un outil tiers demandant plus de mémoire. Si vous utilisez Flash sur un Mac, c'est presque le cas avec 90% d'utilisation du processeur. L'objectif de la plupart des langages de programmation n'est pas de vous sauver, mais de vous donner des outils pour vous sauver. Vous pouvez écrire du code corrompu et corrompu avec des fuites de mémoire dans n'importe quelle langue, y compris celles avec la récupération de place.Les outils tiers ne sont généralement pas aussi bien testés que la plate-forme elle-même. Les pages Web qui essaient d'en faire trop ne sont pas rares non plus.

Si vous voulez faire une expérience pour démontrer ceci, obtenez un mac avec Firefox et allez sur un site bien écrit comme Stack Overflow et passez une heure. Votre utilisation de la mémoire ne devrait pas augmenter beaucoup. Ensuite, passez 5 minutes à visiter des pages aléatoires sur Myspace.

Permettez-moi maintenant essayer de répondre à vos questions en fonction de mes suppositions puisque je ne suis pas familier avec le code source

  • Quand je ferme tous les onglets, pourquoi ne fait pas l'utilisation de la mémoire aller tout le bas?

considérant que chaque instance du navigateur est un processus indépendant avec sa propre mémoire, les onglets dans une seule fenêtre sont tous dans le même processus. Firefox avait l'habitude d'avoir une sorte de mise en cache en mémoire et la simple fermeture d'une tabulation ne supprime pas immédiatement les informations pertinentes du cache en mémoire. Si vous avez rouvert un onglet sur le même site, vous obtiendrez peut-être de meilleures performances. Il y avait une option avancée pour vous permettre de le désactiver, quelque chose comme browser.cache.memory.enable. Ou recherchez simplement la désactivation du cache mémoire.

* Why is there no limits on extensions/themes/plugins memory usage? 

Pour la même raison que Windows ou Linux ne dispose pas d'un processus de vérification sur les applications que vous pouvez exécuter sur eux. C'est un environnement ouvert et vous assumez le risque. Si vous voulez un environnement dans lequel les applications et les extensions sont « validées », Apple pourrait être la voie à suivre :)

* Why does the memory usage increase if it's left open for long periods of time? 

Tous les calculs et les actions dans un script ont des manifestations visuelles. Un script pourrait être en train de faire des choses en arrière-plan (comme demander des matériaux supplémentaires, pré-télécharger des choses, juste des bogues) même si vous ne le voyez pas.

* Why are memory leaks so difficult to find and fix? 

C'est une question de comptabilité. Pensez à tous les objets que vous avez empruntés (même un stylo) ou que quelqu'un vous a emprunté toute votre vie. Sont-ils tous pris en compte? Les fuites de mémoire sont les mêmes (vous empruntez la mémoire du système), sauf que vous passez des objets. Ensuite, regardez les choses sur votre bureau, avez-vous laissé quelque chose traîner parce que vous pourriez en avoir besoin bientôt, même si vous ne le ferez probablement pas? même histoire.

+4

analogie Nice comptabilité. –

+0

@Warren: Merci! – Uri

+0

Et je suis sur un mac ... – zaf

2
  • Pourquoi les fuites de mémoire sont-elles si difficiles à trouver et à résoudre?

Parce que certains développeurs refusent d'utiliser des outils comme barrière électrique.

+0

Firefox devs utilisent Valgrind - ce qui est beaucoup plus capable que Clôture électrique. – slacker

+0

Bon pour eux. J'ai de bons souvenirs de l'utilisation de Valgrind pour chasser les problèmes de mémoire. (Hélas, mon code avait des problèmes importants à l'époque, donc l'expérience globale était pénible, mais ce n'était pas la faute de Valgrind ...) –

1

Les fuites de mémoire sont présentes en premier lieu parce que vous voulez garder les choses en mémoire et non sur le disque. Par exemple, supposons que vous avez une page Web, qui contient des images, CSS, JavaSript, texte. Si pour afficher la page vous allez sur le disque dur chaque fois que vous voulez utiliser l'interpréteur JavaScript ou un analyseur CSS, ou un moteur de rendu de police pour afficher un texte, alors le navigateur sera très lent et parfois ne fonctionnera pas du tout (car un morceau JavaScript peut nécessiter des variables présentes qui sont laissées par un autre morceau JavaScript, par exemple). Par conséquent, un navigateur essaie de garder en mémoire tout ce qui est nécessaire à son travail, et ces objets sont facilement référencés (JavaScript appelant Adobe Flash, Adobe Flash appelant JavaScript, etc.).Et vous devez être très prudent avec de telles références de ressources, car les nettoyer prématurément et hors service va casser le code (mieux garder une ressource autour puis mourir soudainement car il n'est pas là).

P.S. Voir aussi this article pour certains détails sanglants.

Questions connexes