Forcer la collecte des ordures dans Google Chrome

Nous développons une seule page web app avec ZK qui constamment communique avec le serveur et les mises à jour des parties de ses écrans. Mise à jour peut être aussi fréquentes que 1s. Au cours de ces mises à jour, des références à de grandes quantités de JS objets sont perdus et ces objets doivent être nettoyés par le garbage collector finalement.

Aussi loin que nous l'avons compris, Chrome ne fonctionne que son garbage collector sur onglets inactifs. C'est un problème pour nous, car l'application de l'onglet est généralement actif et presque jamais actualisée, ainsi JS objets jamais obtenir recueillies. Si elle reste active pendant un temps suffisant, l'onglet finalement se bloque (Oh Snap message).

Nous avons besoin de procéder à la collecte des ordures manuellement. Jusqu'à présent, nous avons essayé de lancer google Chrome avec --js-flags="--expose-gc" et en cours d'exécution gc(), mais il déclenche une exception:

ReferenceError: gc is not defined

Ce n'est pas le cas sur Firefox -- l'utilisation de la mémoire est plus ou moins constante.

La Force de l'actualisation de la page n'est pas une option.

Nous vous serions reconnaissants pour toute et toutes les suggestions.

MODIFIER: nous avons essayé de courir window.gc() et gc() à la fois sur Chrome versions 23.0.1271.97 m et 25.0.1364.2 dev-m

  • "Aussi loin que nous l'avons compris, Chrome ne fonctionne que son garbage collector sur onglets inactifs" Non, c'est incorrect. Chrome va exécuter le GC à chaque fois qu'il sent qu'il doit, si l'onglet est actif ou non.
  • Avez-vous essaye à l'aide du JavaScript delete?
  • C'est la fenêtre.gc() mais ce n'est pas la solution ultime, car autant que je sache, il ne fonctionne que sur les versions de débogage de Chrome. Comme Crowder a souligné Chrome exécuter en cas de besoin donc, si votre application fuites de mémoire, puis ce que vous devriez revoir votre code pour libérer explicitement les objets alloués à chaque fois que possible.
  • delete n'a rien à voir avec la gestion de la mémoire en JavaScript, à l'exception purement comme un effet secondaire s'il vous arrive de l'utiliser pour supprimer une propriété qui est le seul suspens référence à un objet.
  • Oui, je sais que le delete n'est pas nécessairement déclencher gc, mais il pourrait aider dans le nettoyage des objets, manuellement. Je devrais peut-être avons élaboré un peu.
  • Tout en évitant que le mythe continue à être prepetuated (wow Brendan doit avoir appelé remove ou quelque chose, mais bon, il était sous une énorme pression de temps...).
  • Nous avons trouvé un problème dans code.google.com, où les utilisateurs affirment aussi que le GC ne se produira pas à moins que l'onglet est rendu inactif (7 commentaires). Il est résolu que WontFix. Le plus probablement devrait fonctionner comme vous l'avez décrit, mais pour une raison qui ne fonctionne pas.
  • Je n'interprète pas ce thread de cette façon, je l'interpréter comme quelqu'un qui me dit que la mémoire n'est pas libérée dès qu'ils pensent qu'il devrait être, et que quelqu'un en disant qu'ils pensent qu'ils peuvent causer de l'Aw clin d'oeil! mais la fourniture de zéro de données à l'appui pour que. Clairement si vous pouviez plantage de Chrome en faisant glisser les images à plusieurs reprises, ce ne serait pas une WontFix situation.

InformationsquelleAutor Paulius K. | 2012-12-19