Javascript et de collecte des Ordures
Est-il de toute façon de contrôle lorsque le Javascript effectue la collecte des ordures? Je tiens à lui permettre d'effectuer la collecte des ordures, à certains moments pour assurer le bon fonctionnement de mon site web
- En un mot: non. Ce n'est pas un problème pour de nombreux sites. Peut-être que vous pourriez explian plus en détail quel est le problème avec le vôtre?
- l'Écriture Rapide, Efficace de la Mémoire JavaScript, Mémoire
- Haute-Performance, le Garbage-Collector-Friendly Code
- Pourquoi le downvote? A obtenu quelques bonnes références à lire.
- Lors de l'utilisation de nœud, vous pouvez exécuter le nœud de l'application avec le v8 option
--expose_gc
alors vous pouvez simplement appeler la fonctiongc()
. J'ai trouvé cette réponse de la question v8 | lancer manuellement le garbage collector - Si le code est exécuté côté navigateur puis non c'est la responsabilité de navigateur. Si vous avez été l'exécutant côté serveur comme avec nœud ou rhino, alors oui. Notez que l'utilisation de gc qui nécessite des soins qu'il peut raccrocher exécution.
- Un soutien qui peut donner quelques idées sur la façon de réduire le GC activité en Javascript, peut être trouvé ici: stackoverflow.com/q/18364175/270315
Vous devez vous connecter pour publier un commentaire.
Javascript n'est pas explicitement de la gestion de la mémoire, c'est le navigateur qui décide quand il faut la nettoyer. Parfois, il peut arriver que vous l'expérience de l'onu-lisse de rendu de JavaScript en raison d'une collecte des ordures pause.
Il existe de nombreuses techniques que vous pouvez appliquer à surmonter les bugs causés par le garbage collector (GC). Plus vous appliquez plus vous explorez. Supposons que vous avez un jeu écrit en JavaScript , et chaque seconde de la création d'un nouvel objet, alors il est évident qu'après un certain laps de temps GC va se produire pour faire plus d'espace pour votre application.
Pour l'application en temps réel comme les jeux, ce qui nécessite beaucoup de l'espace de la chose la plus simple que vous pouvez faire est de réutiliser la même mémoire. Cela dépend de comment vous vous la structure de votre code. Si elle génère beaucoup de déchets, alors qu'il pourrait donner agitée de l'expérience.
Par le recours à des procédures simples: C'est bien de savoir que le nouveau mot-clé indique la répartition. Dans la mesure du possible, vous pouvez essayer de réutiliser le même objet à chaque fois en ajoutant ou en modifiant les propriétés. Il est également appelé de recyclage de l'objet
Dans le cas des Tableaux, en attribuant [] est souvent utilisé pour effacer tableau, mais vous devez garder à l'esprit qu'il crée également un nouveau tableau et de poubelles à l'ancien. La réutilisation de la même bloc que vous devez utiliser
arr.length = 0
Cela a le même effet, mais il réutilise le même objet array au lieu d'en créer un nouveau.Dans le cas de fonctions: Parfois, notre programme besoin d'appeler une fonction spécifique de plus de temps ou sur certains intervalles en utilisant la méthode setInterval ou setTimeout.
Vous pouvez optimiser le code ci-dessus par l'affectation de la fonction à un permanent de la variable plutôt que de frai à chaque fois à intervalles réguliers.
Autre chose est que la matrice méthode slice() renvoie un nouveau tableau (fondée sur une plage dans le tableau d'origine,qui peut rester intact), de la chaîne substr également retourne une nouvelle chaîne (fondée sur une plage de caractères dans la chaîne d'origine, qui peut rester intact), et ainsi de suite. L'appel de ces fonctions crée des ordures si pas réutilisées correctement.
Pour éviter les ordures entièrement en JavaScript est très difficile, vous pourriez dire impossible. Sa dépend, comment vous réutiliser les objets et les variables afin d'éviter les déchets. Si votre code est bien structuré et optimisé, vous pouvez réduire les frais généraux.
Malheureusement, il n'y a aucun moyen de contrôle LORS de la collecte des déchets a lieu, mais avec la bonne formation des objets, vous POUVEZ contrôler la façon dont rapidement et proprement, il arrive. Jetez un oeil à ces documents sur Mozilla Dev Net.
Pourquoi ne pas conserver les références de tous vos objets jusqu'à ce que vous voulez qu'ils soient GC avais?
vous pouvez effectuer certaines modifications pour améliorer votre utilisation de la mémoire, comme:
JavaScript est un garbage collector de la langue, ce qui signifie que l'environnement d'exécution est responsable de la gestion de la mémoire requise lors de l'exécution de code.
La forme la plus populaire de la collecte des ordures pour le JavaScript est appelée mark-and-sweep.
Un deuxième, moins populaire de la collecte des ordures est de comptage de référence. L'idée est que chaque valeur garde une trace de la façon dont de nombreuses références sont faites
GC suit ces algo, même si vous parvenez à déclencher la GC, il ne sera pas garanti qu'il sera exécuté immédiatement, vous êtes seulement en marquant
garbage collection (GC) est une forme de gestion automatique de la mémoire en supprimant les objets qui n'a plus besoin de vous.
tout processus traitent de mémoire, procédez comme suit:
1 - allouer de l'espace mémoire vous avez besoin
2 - effectuer un traitement
3 - libre cet espace mémoire
il existe deux principaux algorithme utilisé pour détecter les objets qui n'a plus besoin de vous.
De comptage de références de collecte des ordures: cet algorithme réduit la définition de la "un objet n'est plus nécessaire" au "un objet n'a pas d'autre objet de référencement pour elle", l'objet sera supprimé si aucun point de référence pour il
Mark-and-sweep algorithme: connecter des objets à la racine de la source. aucun objet ne se connecte pas à la racine ou d'un autre objet. cet objet sera retiré.
actuellement, la plupart des navigateurs modernes, l'utilisation de la deuxième algorithme.