Maison Java javaDidacticiel Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)

Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)

Feb 27, 2019 am 11:21 AM
java

Le contenu de cet article concerne l'analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction par image et texte). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Le processus d'exécution et de compilation du code Java

Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)

Gestion de la mémoire Java

Division du modèle de mémoire java

Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)

Accès au positionnement des objets

Object obj = new Object();
Copier après la connexion

Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)

Création et initialisation d'un objet Java

Une fois l'objet Java créé, il aura sa propre zone dans la mémoire tas, suivi du processus d'initialisation de l'objet. Résumé de la séquence d'initialisation des membres de la classe : d'abord statique, puis normal, puis construct, d'abord la classe parent, puis la classe enfant, et l'ordre d'écriture au même niveau

  1. Exécuter la classe parent variables statiques et blocs de code statiques d'abord, puis exécutez d'abord les variables statiques de sous-classe et les blocs de code statiques

  2. Exécutez d'abord les variables ordinaires et les blocs de code de la classe parent, puis exécutez le constructeur de la classe parent (statique méthode)

  3. Exécutez d'abord les variables ordinaires et les blocs de code de la sous-classe, puis exécutez le constructeur de la sous-classe (méthode statique)

  4. L'initialisation de la méthode statique précède méthodes ordinaires, et l'initialisation statique n'est effectuée que lorsque cela est nécessaire et n'est initialisée qu'une seule fois.

Remarque : Pour le constructeur de la sous-classe, que le constructeur prenne ou non des paramètres, par défaut, il recherchera d'abord le constructeur de la classe parent sans paramètres. Si la classe parent n'a pas de constructeur sans paramètres, la sous-classe doit utiliser la clé supper pour appeler le constructeur de la classe parent avec des paramètres, sinon la compilation échouera.

Mécanisme de recyclage GC

Le garbage collector en Java peut récupérer automatiquement la mémoire occupée par les objets inutiles, mais il est uniquement responsable de libérer toute la mémoire occupée par les objets créés en Java, l'espace mémoire alloué à l'objet via une méthode autre que la création de l'objet ne peut pas être récupéré par le garbage collector ; et le garbage collection lui-même a également une surcharge, et la priorité de GC est relativement faible, donc si la JVM n'est pas confrontée épuisement de la mémoire, ce ne sera pas le cas. Les ressources seront gaspillées pour le garbage collection afin de restaurer la mémoire. Enfin, nous constaterons que tant que le programme n’est pas sur le point de manquer d’espace de stockage, l’espace occupé par l’objet ne sera jamais libéré. Nous pouvons démarrer activement un garbage collector via le code System.gc() (bien que la JVM ne le recyclera pas immédiatement). Avant de libérer l'espace mémoire alloué par new, l'espace mémoire alloué par d'autres méthodes sera libéré via finalize().

Quelle mémoire doit être recyclée

Tas Java, mémoire de la zone de méthode

Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)

Quand recycler

  1. Comptage de références

Ajoute un compteur de référence à un objet Chaque fois qu'il y a un endroit qui le référence, le compteur plus un. En revanche, chaque fois qu'une référence devient invalide, le compteur est décrémenté de un. Lorsque le compteur est à 0, cela signifie que l'objet n'est pas référencé. Par exemple :
Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)
Cependant, la méthode de comptage de références ne peut pas résoudre les références circulaires entre les objets, voir l'exemple suivant
Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)
  1. Analyse d'accessibilité

Établir plusieurs objets racine (GC Root), chaque objet est un nœud enfant Lorsqu'un objet ne trouve pas la racine, l'objet est considéré comme inaccessible. .
Analyse du mécanisme de mémoire Java et du mécanisme de recyclage GC (introduction image et texte)
Il n'y a pas de chemin depuis la racine vers Object4 et Object5, ce qui indique que ces deux objets sont inaccessibles depuis la racine et peuvent être recyclés. En Java, les objets pouvant être utilisés comme racines GC incluent : les objets référencés dans la pile de machines virtuelles Java ; les objets référencés par des variables statiques dans la zone de méthode ; les objets référencés par des constantes dans la zone de méthode ;

Comment recycler

  1. Marque - algorithme d'effacement

Marquez d'abord tous les objets qui doivent être recyclés, et une fois le marquage terminé, tous les objets marqués seront recyclés uniformément.
Cet algorithme présente deux problèmes : 1) Le processus de marquage et d'effacement n'est pas efficace. Principalement parce que le garbage collector doit parcourir tous les objets accessibles à partir de l'objet racine GC Roots et ajouter une marque à ces objets pour indiquer que cet objet est ignoré pendant le nettoyage. Ensuite, pendant la phase de nettoyage, le garbage collector démarrera à partir du tas Java. est parcouru du début à la fin. Si un objet n'est pas marqué, l'objet sera effacé. Évidemment, l'efficacité du parcours est très faible ; 2) De nombreux fragments d'espace discontinus seront générés, donc lorsqu'un objet plus grand doit être alloué pendant l'exécution du programme, il ne sera peut-être pas en mesure de trouver suffisamment de mémoire et devra démarrer une collecte des ordures à l'avance.
  1. Algorithme de copie

Divise la mémoire en deux blocs et n'utilise qu'un seul bloc à la fois. Lorsque ce bloc de mémoire est plein, les objets survivants sont copiés dans un autre bloc et disposés strictement en fonction de l'adresse mémoire, puis le bloc de mémoire utilisé est recyclé uniformément.
L'avantage est : il peut obtenir un espace mémoire continu
L'inconvénient est : la moitié de la mémoire est gaspillée
La JVM moderne ne divise pas l'espace mémoire selon 1:1, mais divise la mémoire en un plus grand La zone Eden et deux zones Survivant plus petites, Eden et une zone Survivant, sont utilisées à chaque fois. Lors du recyclage, copiez immédiatement les objets survivants d'Eden et Survivor sur un autre Survivant, et enfin nettoyez l'espace dans Eden and Survivor. En fait, il y a une autre question ici : et si après le ramasse-miettes, l'espace requis par les objets survivants était supérieur à l'espace restant du survivant ? La réponse est qu'il doit s'appuyer sur une autre mémoire pour l'allocation (il s'agit ici principalement de l'ancienne génération).
  1. Algorithme de marquage-organisation

Le processus est le même que l'algorithme de marquage-effacement, sauf que la zone mémoire non marquée n'est pas nettoyée après marquage. La seconde consiste à déplacer tous les objets survivants vers une extrémité, puis à nettoyer la mémoire en dehors de la limite
  1. Algorithme de génération

L'algorithme de génération. algorithme dit générationnel Il divise la mémoire en plusieurs blocs en fonction du cycle de vie de l'objet, afin que l'algorithme de garbage collection approprié puisse être sélectionné en fonction de « l'âge » de l'objet. En Java, les objets en mémoire sont répartis selon leur durée de vie : 1. Nouvelle génération : cycle de vie court, comme les variables locales ; 2. Ancienne génération : objets à cycle de vie long ; 3. Génération permanente : rarement recyclée, cycle de vie long ; , comme les informations de classe chargées.
La nouvelle génération et l'ancienne génération sont stockées dans la zone du tas, et la génération permanente est stockée dans la zone des méthodes. Les objets volumineux entreront directement dans l'ancienne génération, comme les chaînes très longues ou les grands tableaux, ce qui est une mauvaise nouvelle pour l'allocation de mémoire JVM, car les objets volumineux doivent trouver de la mémoire contiguë, sinon le GC sera déclenché, donc les objets volumineux de courte durée le seront. nécessaire Essayez de l'éviter. Les objets qui ont survécu longtemps entrent dans l'ancienne génération. Chaque fois qu'un objet subit un gc mineur dans la nouvelle génération, son âge est augmenté de 1. Par défaut, il entrera dans l'ancienne génération lorsqu'il atteindra 15 ans. Lors de chaque GC mineur, la machine virtuelle détecte si la taille moyenne promue vers l'ancienne génération est supérieure à la taille restante actuelle de l'ancienne génération. Si elle est plus petite, un GC complet est effectué.
La nouvelle génération utilise un algorithme de copie (car il y a moins d'objets survivants et trop d'objets morts. Si vous utilisez l'algorithme mark-sweep, vous devez parcourir les marques, ce qui est évidemment moins efficace. Cependant, en utilisant la copie L'algorithme peut enregistrer les objets survivants. Copiez moins d'objets dans la zone de mémoire disponible, donc l'efficacité est plus élevée) pour le recyclage GC. Parce que l'ancienne génération a un taux de survie élevé, elle utilise un algorithme d'effacement des marques ou de tri des marques pour le recyclage.

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

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)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

See all articles