recherche
Maisoninterface Webjs tutorielIntroduction détaillée au garbage collection nodejs

Cet article vous apporte une introduction détaillée au garbage collection nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Le mécanisme de garbage collection de nodejs est automatiquement géré par le moteur v8.

Limite de mémoire de nodejs

Dans les langages back-end généraux (php), il n'y a pas de limite sur l'utilisation de la mémoire, mais pour nodejs, cela dit que seule une partie du système peut être utilisée - 1,4G pour les systèmes 64 bits et 0,7G pour les systèmes 32 bits. À l'heure actuelle, si vous souhaitez traiter un fichier 3G pour l'analyse des données, même si la mémoire système est de 8 Go, la mémoire du processus nodejs débordera toujours.

Le problème ci-dessus est principalement dû au fait que nodejs est basé sur la v8 et que nodejs gère la mémoire via la propre méthode de la v8. Alors pourquoi la v8 limite-t-elle la taille de la mémoire tas ? Il y a 2 raisons :

1. Raison superficielle : la v8 est conçue pour les navigateurs et il est peu probable qu'elle rencontre des situations de mémoire importante.

2. Raison profonde : limitations du mécanisme de garbage collection v8. En prenant 1,5 Go de mémoire tas comme exemple, la v8 prend 50 ms pour effectuer un petit garbage collection et 1 s pour effectuer un garbage collection non incrémentiel. Le garbage collection entraînera une pause du thread js. Avec un tel temps passé, les performances et la réactivité de l'application chuteront.

La limite de mémoire peut être activée :
--max-old-space-size (ancienne génération)
--max-new-space-size (nouvelle génération)
tas v8 Taille de la mémoire = ancienne génération + nouvelle génération

mécanisme de collecte des ordures v8
la collecte des ordures v8 est principalement basée sur le mécanisme de collecte des ordures générationnel . Le garbage collection de mémoire est effectué sur différentes générations en fonction de la durée de survie de l'objet, et différents algorithmes sont exécutés sur différentes générations de mémoire.

Nouvelle génération ---> Objets avec un temps de survie court
Ancienne génération ---> Objets avec un temps de survie long ou mémoire résidente
Comme mentionné ci-dessus, la mémoire tas nodejs La taille est la nouvelle l'espace mémoire de génération plus l'espace mémoire d'ancienne génération.

Algorithme de nouvelle génération
La nouvelle génération utilise principalement l'algorithme de récupération pour le ramassage des ordures.

Il s'agit d'une méthode de copie pour implémenter le garbage collection. La mémoire tas est divisée en deux et chaque espace est appelé semi-espace. Parmi ces deux semi-espaces, un seul est utilisé (appelé depuis l'espace) et l'autre est libre (appelé vers l'espace). Lors du démarrage de l'allocation, nous commençons d'abord par l'espace from. Lorsque le garbage collection démarre, nous commençons également par l'espace from pour vérifier les objets survivants, copions les objets survivants dans l'espace to, et l'espace occupé par les objets non survivants sera être libéré. Une fois la copie terminée, les rôles de l'espace depuis et de l'espace vers sont inversés.
Comme vous pouvez le voir dans le processus ci-dessus, l'inconvénient du nettoyage est qu'il n'utilise que la moitié de la mémoire du tas, sacrifiant ainsi le temps d'acquisition de l'espace.

L'ancienne génération passe les algorithmes mark-sweep et mark-comopact.

L'élimination des marques par balayage est divisée en deux étapes : le marquage et le nettoyage. mark-sweep parcourt d'abord tous les objets de la mémoire du tas lors de la phase de marquage et marque les objets survivants, puis efface les objets non marqués lors de la phase de nettoyage ; On peut voir que le nettoyage ne copie que les objets vivants et que le balayage par marquage nettoie uniquement les objets morts. Parce que les objets survivants de la nouvelle génération occupent une petite partie et que les objets morts de l'ancienne génération en occupent une petite partie, c'est la raison pour laquelle ces deux algorithmes sont efficaces.

Organisation des marques Mark-compact, il y aura un problème de mark-sweep Après recyclage, la mémoire sera dans un état discontinu (fragmentation de la mémoire). La fragmentation de la mémoire aura un impact sur l'allocation de mémoire ultérieure, car il y aura une situation dans laquelle une grande mémoire devra être allouée, mais tous les fragments de mémoire ne pourront pas terminer l'allocation. Cela déclenchera le garbage collection à l'avance et ce recyclage n'est pas nécessaire. Mark-compact est développé sur la base de Mark-sweep. Sa principale différence est qu'une fois l'objet marqué, tous les objets survivants seront déplacés vers une extrémité pendant le processus de tri et seront effacés directement une fois le mouvement terminé.

Résumé : lors d'une utilisation normale, la limite de mémoire de la v8 est toujours suffisante, mais le garbage collection et le thread unique de nodejs affecteront toujours les performances. Si vous souhaitez des performances élevées, vous devez réduire au maximum la collecte des déchets. Dans le développement réel, des objets d'ancienne génération doivent être utilisés, par exemple lors de la mise en œuvre d'une session de service Web (session), qui est généralement stockée (tableau) en mémoire. Lorsque le nombre d'accès est important, cela entraînera une forte augmentation des anciens. objets de génération, ce qui peut provoquer un débordement. Si nous devons traiter des données de mémoire volumineuses, comme la lecture d'un fichier 3G, nous utiliserons la méthode pipe() du flux lisible, afin qu'il ne soit pas affecté par les limitations de mémoire de la v8 et améliore la robustesse du programme nodejs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Comprendre le moteur JavaScript: détails de l'implémentationComprendre le moteur JavaScript: détails de l'implémentationApr 17, 2025 am 12:05 AM

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisationPython vs JavaScript: la courbe d'apprentissage et la facilité d'utilisationApr 16, 2025 am 12:12 AM

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Python vs JavaScript: communauté, bibliothèques et ressourcesPython vs JavaScript: communauté, bibliothèques et ressourcesApr 15, 2025 am 12:16 AM

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

De C / C à JavaScript: comment tout cela fonctionneDe C / C à JavaScript: comment tout cela fonctionneApr 14, 2025 am 12:05 AM

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Moteurs JavaScript: comparaison des implémentationsMoteurs JavaScript: comparaison des implémentationsApr 13, 2025 am 12:05 AM

Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Au-delà du navigateur: Javascript dans le monde réelAu-delà du navigateur: Javascript dans le monde réelApr 12, 2025 am 12:06 AM

Les applications de JavaScript dans le monde réel incluent la programmation côté serveur, le développement des applications mobiles et le contrôle de l'Internet des objets: 1. La programmation côté serveur est réalisée via Node.js, adaptée au traitement de demande élevé simultané. 2. Le développement d'applications mobiles est effectué par le reactnatif et prend en charge le déploiement multiplateforme. 3. Utilisé pour le contrôle des périphériques IoT via la bibliothèque Johnny-Five, adapté à l'interaction matérielle.

Construire une application SaaS multi-locataire avec next.js (intégration backend)Construire une application SaaS multi-locataire avec next.js (intégration backend)Apr 11, 2025 am 08:23 AM

J'ai construit une application SAAS multi-locataire fonctionnelle (une application EdTech) avec votre outil technologique quotidien et vous pouvez faire de même. Premièrement, qu'est-ce qu'une application SaaS multi-locataire? Les applications saas multi-locataires vous permettent de servir plusieurs clients à partir d'un chant

Comment construire une application SaaS multi-locataire avec Next.js (Frontend Integration)Comment construire une application SaaS multi-locataire avec Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Cet article démontre l'intégration frontale avec un backend sécurisé par permis, construisant une application fonctionnelle EdTech SaaS en utilisant Next.js. Le frontend récupère les autorisations des utilisateurs pour contrôler la visibilité de l'interface utilisateur et garantit que les demandes d'API adhèrent à la base de rôles

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel