Recommandations:

JVM- Super complet -Illustration

JVM-Carte mentale

JVML'architecture de

Graphique simplifié :

Chargeur de classe

Action du chargeur de classe :Chargement.classDocumentation

Processus de chargement des classes (Trois étapes):

1. Phase de chargement

Compilé classDocumentation Charger en mémoire (Domaine méthodologique),Il en résulte unClassObjet.

2. Phase de liaison

Ce sera pourVariables statiques Allouer la mémoire et définir les valeurs par défaut .

3.Phase d'initialisation

Catégorie d & apos; exécutionConstructeur() Effectuer une tâche d'initialisation .

javaChargeur de classe autonome:

  • Chargeur de classe de démarrage(Bootstrap ClassLoader):Alias chargeur de classe racine ou chargeur de classe Bootstrap,Responsable du chargement%JAVA_HOME%\bin Tous dans le catalogue jarSac,Ou-Xbootclasspath Chemin spécifié par le paramètre ,Exemple:rt.jar
  • Chargeur de classe étendu(Extension ClassLoader):Responsable du chargement%JAVA_HOME%\bin\ext Tous dans le catalogue jarSac,Oujava.ext.dirs Chemin spécifié par le paramètre
  • Chargeur de classe système(Application ClassLoader): Alias application class loader ,Responsable du chargement de la Bibliothèque de classe spécifiée sur le chemin de classe utilisateur,S'il n'y a pas de chargeur personnalisé dans l'application,Ce chargeur est le chargeur par défaut

Mécanisme de délégation parentale

Le chargeur de classe a reçu une demande de chargement

1. Je ne vais pas le charger moi - même. ,Déléguer la demande au chargeur parent,Si le chargeur parent existe encore son chargeur parent,Ensuite, déléguer davantage,Chargeur de classe de démarrage qui finira par atteindre le niveau supérieur

2.Si la classe mère peut terminer la tâche de chargement,Retour réussi

3. Si ça ne marche pas, ,Le Sous - chargeur essaie de charger lui - même

Avantages:Évitez les charges répétées + Éviter les manipulations de classe de base

Native

Utilisation dans le programme :private native void start0();

1. Oui. nativeMot - clé,Descriptionjava Ne fonctionne plus. , Retournez à la base. c Bibliothèque de langues !

2. Va à la pile de méthodes locales ,Et appeler l'interface de la méthode locale vanative Méthode d'introduction de l'exécution

Pile de méthodes locales(Native Method Stack)

Une zone de marquage a été spécialement ouverte dans la zone mémoire: Native Method Stack, Responsable de l'enregistrement nativeMéthodes,

Moteur en marche ( Execution Engine )Par l'intermédiaire de l'interface de méthode locale lors de l'exécution(JNI)Charger les méthodes dans la Bibliothèque de méthodes locales

Interface de la méthode locale(JNI)

.Le rôle de l'interface locale est de fusionner les différents langages de programmation pourJava Utilisation , C'était une fusion. C/C++Procédure,

Java Au moment de la naissance, C/C++ En marchant ,J'ai envie de prendre pied., Il doit y avoir un appel C、C++Procédures,

Ensuite, une zone de marquage a été créée spécifiquement dans la zone mémoire: Native Method Stack, Responsable de l'enregistrement nativeMéthodes,

Moteur en marche ( Execution Engine )Par l'intermédiaire de l'interface de méthode locale lors de l'exécution(JNI)Charger les méthodes dans la Bibliothèque de méthodes locales

PCCompteur de programmes

Compteur de programmes: Program Counter Register

Chaque thread a un compteur de programme,C'est un thread privé,C'est un pointeur.,

Pointez vers le Code octet de la méthode dans la zone de la méthode(Pour stocker des adresses qui pointent vers des instructions comme, Code d'instruction à exécuter aussi),

Lire la prochaine instruction du moteur d'exécution, C'est un très petit espace mémoire,Presque négligeable

Pourquoi un compteur de programme est - il nécessaire? Enregistrer l'emplacement du Code à exécuter , Empêcher la reprise du changement de fil

Valeur du compteur de modificateurs de moteur d'exécution Bytecode

Domaine méthodologique(Method Area)

Le domaine de la méthode est Tous les Threads sont partagés , Tous les codes d'octets de champ et de méthode , Et quelques méthodes spéciales , Comme un constructeur , Le Code d'interface est également défini ici ,

En termes simples,L'information sur toutes les méthodes définies est conservée dans cette zone, Cette zone est partagée .

Variables statiques(static)、Constante(final)、Informations sur la classe(Méthode de construction、Définition de l'interface)(Class)、Le pool constant d'exécution existe dans la zone de la méthode,Mais la variable instance existe dans la mémoire tas, Indépendamment de la zone de la méthode

Pile

Pile: Premier entré ,Chaque fil a sa propre pile, Exécution du gestionnaire de mémoire de pile , Synchronisation du cycle de vie et du fil , Fin du fil , La mémoire de pile est libérée .

Pour la pile , Aucun problème de collecte des ordures , Une fois le thread terminé , La pile est terminée. .

Exécution en mémoire de pile :8Grand type de base + Référence de l'objet + Méthode de l'Instance.

Principe de fonctionnement de la pile: Cadre de pile

La pile est pleine. :StackOverflowError

File d'attente:Premier entré, premier sorti(FIFO:First Input First Output)

Pile

UnJVM Il n'y a qu'un tas de mémoire ,La taille de la mémoire en tas est réglable,

Après que le chargeur de classe a lu le fichier de classe , En général, les classes ,Méthodes,Constante,Variables,Les objets réels de tous nos types de référence, Dans le tas .

La mémoire heap est divisée en trois zones :

  • Nouvelle zone (Eden Park):Young/New
  • Zone de soins aux personnes âgéesold
  • Zone permanente Perm

Nouvelle zone : Naissance de la classe , Un lieu de croissance et de mort

Divisé en:

  • Eden Park: Tous les objets sont dans le jardin d'Eden newSors de là.
  • Survivre0 Zone et survie 1Zone:LumièreGC Après ça.

Zone gériatrique (Zone de soins aux personnes âgées): Lumière multiple GCLes objets survivants sont placés dans la zone des personnes âgées

La vérité. : Après étude ,99% Tous les objets sont temporaires

Zone permanente

Cette zone est en mémoire permanente ,Pour stockerIDK Porté par lui - même ClassObjet,InterfaceMétadonnées,Ce qui est stockéJava Certains environnements d'exécution ou

Informations sur la classe,Il n'y a pas de collecte des ordures dans cette zone.

FermerVMLe virtuel libère la mémoire de cette zone, Une classe de démarrage , Un grand nombre de tiers chargés jarSac.

Tomcat Trop d'applications déployées , Un grand nombre de classes de réflexion générées dynamiquement , Constamment chargé , Jusqu'à ce que la mémoire soit pleine ,Ça va arriver0OM;

  • jdk1.6Avant:Génération permanente, Le pool constant est dans la zone de méthode .
  • jdk1.7Génération permanente, Mais lentement dégénéré ,à la génération permanente, Pool constant en tas
  • jdk1.8Après:Pas de Représentant permanent, Le pool constant est situé à Méta - espace

Attention!:

Méta - espace: Existe logiquement , Physiquement inexistant ,Parce que: Stockage sur disque local , Ne pas utiliser la mémoire de la machine virtuelle

Par défaut,JVMLa mémoire maximale utilisée est un quart de la mémoire totale de l'ordinateur,JVMLa mémoire d'initialisation utilisée est un soixante - quatrième de la mémoire totale de l'ordinateur.

Résumé:

  • Pile: Variables du type de base , Variable de référence de l'objet , Méthode de l'objet instance
  • Pile: Stockage par new Objets et tableaux créés
  • Domaine méthodologique:ClassObjet,staticVariables,Pool constant(Constante)

Outils de réglage

public class Test2 {
static String a="111111111111"; public static void main(String[] args) {
while (true){
a=a+ new Random().nextInt(99999999)+new Random().nextInt(99999999);
}
}
}

Télécharger l'adresse:https://www.ej-technologies.com/download/jprofiler/version_92

Une fois l'installation terminée,Besoin deIDEA Module d'installation Central .

Ajouter un paramètre exécuter le programme :

-Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError:Quand ça arriveOOMErreur,Génère undumpDocumentation( Miroir de mémoire du processus )

Trouvé dans le répertoire des projets dumpDocumentation,Double - cliquez pour ouvrir , .Vous pouvez voir ce qui prend beaucoup de mémoire

FréquentJVMParamètres de réglage

Paramètres de configuration Fonction
-Xms Taille initiale du tas.Par exemple::-Xms256m
-Xmx Taille maximale du tas.Par exemple::-Xmx512m
-Xmn Taille du cénozoïque .Généralement Xmx De 1/3 Ou 1/4.Cénozoïque = Eden + 2 - Oui. Survivor Espace. L'espace disponible réel est = Eden + 1 - Oui. Survivor,C'est - à - dire: 90%
-XX:NewRatio Proportion de la nouvelle génération par rapport à la génération plus âgée,Par exemple: –XX:NewRatio=2,Le cénozoïque occupe tout l'espace du tas1/3, Représentation des personnes âgées 2/3
-XX:SurvivorRatio Le cénozoïque Eden Avec Survivor Rapport de.La valeur par défaut est 8.C'est - à - dire: Eden Occupant l'espace cénozoïque 8/10, Les deux autres. Survivor Parts respectives 1/10
-XX:+PrintGCDetails Imprimer GC Information
XX:+HeapDumpOnOutOfMemoryError Laissez la machine virtuelle en cas de débordement de mémoire Dump Sortir le tas de mémoire actuel dump Snapshot, Pour l'analyse

Algorithmes courants de collecte des ordures

Algorithme de comptage des références

Le principe est que cet objet a une référence,C'est - à - dire ajouter un compte,La suppression d'une référence réduit d'un nombre.

Lors de la collecte des ordures,Seuls les comptes de collecte sont 0 Objet de.Le plus mortel de cet algorithme est l'incapacité de traiter les références circulaires.

Algorithme de réplication

Cet algorithme divise l'espace mémoire en deux zones égales,N'utilisez qu'une seule zone à la fois.

Lors de la collecte des ordures,Traverser la zone d'utilisation actuelle,Copier l'objet utilisé dans une autre zone.

Cet algorithme ne traite que les objets utilisés à la fois,Les coûts de reproduction sont donc relativement faibles,En même temps, copier le passé peut encore effectuer le nettoyage de mémoire correspondant après.

Avantages: Aucun problème de fragmentation

Inconvénients: Nécessite deux fois plus de mémoire ,Déchets

Marquage-Algorithme de nettoyage

Cet algorithme est exécuté en deux étapes.

La première étape commence par la référence au noeud racine Objets recyclables ,

La deuxième étape traverse tout le tas,Effacer les objets non marqués.

Avantages: Pas de gaspillage de mémoire

Inconvénients:Cet algorithme doit mettre en pause toute l'application,En même temps,Fragment de mémoire généré

Marquage-Algorithme de compression

Cet algorithme combine " Marquage-Effacer ” Et “ Copier ” Les avantages des deux algorithmes.

C'est aussi en deux étapes,

La première étape marque tous les Objets recyclables ,

La deuxième étape traverse tout le tas,Effacer les objets non marqués et laisser les objets vivants“Compression”Jusqu'à l'un des morceaux de la pile,Décharge séquentielle.

Cet algorithme évite“Marquage-Effacer”Le problème des débris,Et il a évité“Copier”Le problème spatial de l'algorithme.

Stratégie de recyclage par génération

1.La grande majorité des objets qui viennent d'être créés sont stockés dansEdenZone

2.QuandEden La première fois que la zone est pleine ,Ça va déclencherMinorGC(LumièreGC).D'abordEden Collecte et élimination des déchets dans la zone , Et copier les objets vivants S0,En ce momentS1C'est vide..

3.La prochaine foisEdenQuand la zone est pleine, Effectuer une autre collecte des ordures , Cette réunion EdenEtS0 Nettoyage de tous les objets de déchets dans la zone , Et copier les objets vivants dans S1,En ce momentS0 Vide .

4. Si souvent S0EtS1 Basculer plusieurs fois (Par défaut15Une fois)Après,Les objets vivants les transfèrent à la génération plus âgée.

5. Déclenche quand la génération plus âgée est pleine FullGC(TousGC)

MinorGC

  • L'algorithme utilisé est l'algorithme de réplication
  • Les jeunes générations sont déclenchées quand l'espace est serré
  • Par rapport à la collecte complète , Intervalle de collecte plus court

FullGC

  • Les algorithmes utilisés sont généralement des algorithmes de compression de marqueurs
  • Quand les vieux sont pleins , Déclenche une opération de collecte complète
  • Peut être utilisé System.gc()Méthode pour lancer explicitement la collection complète
  • La collecte complète prend beaucoup de temps

Collecteur d'ordures

Correspondance générale pour le collecteur d'ordures :

Collecteur série(Serial)

Serial Le collecteur est Hotspot En cours Client Collecteur cénozoïque par défaut en mode, Il se caractérise par: : Collection monothread , Mais c'est simple et efficace.

Collecteur parallèle(ParNew)

ParNew Le collecteur est en fait devant Serial Version multithreadée de

Parallel Scavenge Collecteur

Avec ParNew Similaire,Parallel Scavenge Utilise également des algorithmes de réplication ,C'est aussi un collecteur multithreadé parallèle.

Mais contrairement à d'autres collecteurs qui s'efforcent de réduire au minimum le temps de collecte des ordures,Parallel Scavenge Mettre davantage l'accent sur le débit du système ,

Débit du système = Temps d'exécution du code utilisateur /( Temps d'exécution du code utilisateur + Temps de collecte des ordures )

Serial Old Collecteur

Serial Old - Oui. Serial Ancienne version du collecteur, C'est aussi un collecteur monothreadé ,Utiliser “ Marquage-Organiser ” Algorithmes

Parallel Old Collecteur

Parallel Old - Oui. Parallel Scavenge Ancienne version du collecteur, Utilisation de multithreads et “ Marquage-Organiser ” Compte.

Droit,Débit prioritaire

CMS Collecteur(Concurrent Mark Sweep)

CMSEst un collecteur qui vise à obtenir un temps d'arrêt de récupération minimal(CMSAussi appelé collecteur Multi - simultané à faible pause),

Basé sur ” Marquage-Effacer ” Réalisation de l'algorithme, Tout GC Le processus est divisé en: 4 Étapes:

Marquage initial(CMS initial mark)

Marquage simultané(CMS concurrent mark: GC Roots Tracing Processus)

Re - Tagging(CMS remark)

Nettoyage simultané(CMS concurrent sweep: Les objets morts seront libérés en place , Attention!: Pas de compression ici )

G1 Collecteur

G1 Empiler la mémoire “ Diviser en deux ” ,Diviser la mémoire heap en plusieurs zones indépendantes de taille égale(Region),

ChaqueRegion Si nécessaire. , Jouer la nouvelle génération EdenEspace、SurvivorEspace, Ou l'espace gériatrique .

Les collecteurs peuvent jouer différents rôlesRegion Utiliser différentes stratégies pour traiter ,Que ce soit un objet nouvellement créé ou qu'il ait survécu pendant un certain temps、Les vieux objets qui ont survécu à plusieurs collectes peuvent obtenir de bons résultats de collecte.

Pourquoi concevoir pour le recyclage des déchetsSTW(stop the world)?

Si elle n'est pas conçue STW,Peut - être que le thread de l'utilisateur est terminé au moment de la collecte des ordures,Tous les objets du tas ont perdu leurs références, Tout est devenu de la merde. , C'est tout.

ConçuSTW, Recyclage rapide des déchets , Reprendre l'exécution du thread utilisateur .

JVM- Autre article available in English under the title

  1. 【JVM】 Première vue de la machine virtuelle - Diagramme de la zone de données d'exécution

    Cet article est d'écouter Goo Bubble XXNotes sur l'Organisation vidéo des cours publics, Plus résumé que les livres ,Merci beaucoup.. Modèle informatique ( Compilation des connaissances ):Ensemble de données(Données).Ensemble d'instructions(Instructions de fonctionnement,+-Attendez.). Ensemble de contrôle (Cycle de ramification) JVM Zone de données d'exécution : Compteur de programmes(Chaque fil a) ...

  2. Flume Première vue et pratique

    Photo by Janke Laskowski on Unsplash Livres de référence :<Flume Construire une grande disponibilité .Système extensible d'acquisition de journaux de masse> --Hari Shreedharan Tiens. Ci - après dénommée& ...

  3. 46Zhang.PPTNarrationJVMArchitecture、GC Algorithme et réglage

    BenPPTDeJVM Aperçu de l'architecture .GCAlgorithmes.HotspotGestion de la mémoire.HotspotCollecteur d'ordures..Six aspects des outils de réglage et de surveillance sont décrits.(Embeddediframe, Navigation par ordinateur recommandée ) Bien sûr que si. ,PPT Téléchargement disponible ...

  4. java UtilisationManagementFactoryAccèsjvm,os Quelques informations sur --Tourne.

    Adresse originale:http://blog.csdn.net/dream_broken/article/details/49759043 Pour en savoir plus sur la prochaine Java Exécution du projet jvmSituation, Certains outils de surveillance sont disponibles ,Par exemple, ...

  5. Jvm Analyse de la mémoire Et GC Résumé de l'apprentissage individuel

    Depuis sa naissance ,20 Des années se sont écoulées. ,JavaLa langue la plus parlée à ce jour. Ça dépend. Java Diverses technologies et caractéristiques disponibles ,Permettre aux développeurs d'écrire des programmes élégants et efficaces.Aujourd'hui, nous en parlerons.JavaUne technologie de base mais très importante pour la gestion de la mémoire Compris.C ...

  6. JVMChargement de classe

    JVM Le mécanisme de chargement de classe pour :JVM Décrire la classe classChargement du fichier en mémoire,Et vérifier les données.Résolution et initialisation de la transformation, La formation finale peut être JVM Utilisation directe JavaType ClassLoader JVMDansClassLoade ...

  7. JavaMachine virtuelle JVM

    finalize();(Non recommandé, Coût élevé , Grande incertitude ) Si vous passez outre dans une classefinalize()Méthodes, Alors vous pouvez être GCQuand,Sauver quelqu'un que vous voulez sauver, Ne pas recycler , Mais seulement une fois. . GC ...

  8. In Linux Installation moyenne Oracle JDK 8 Et JVM Mécanisme de chargement de classe pour

    Références Le contenu de cet article provient de Oracle Documents officiels Java SE Tools Reference .Oracle In Java La documentation sur les aspects est très complète.C'est exact. Java 8 Amis intéressés, On peut le trouver directement. ...

  9. MapReduce Notes d'analyse 6 :TaskTracker Initialiser la tâche et démarrer JVMProcessus

    Dans la section précédente, nous avons analysé JobTrackerAppelezJobQueueTaskScheduler Assigner des tâches ,JobQueueTaskScheduler Encore une fois. JobInProgressProcessus de recherche des tâches dans un certain ordre ...

  10. javaTrop.low, Je ne peux pas m'en empêcher. jvm Les riches ressources de la plateforme ?Essaie.kotlinC'est parti.(Un.)

    Essayez.kotlin Causes Pour diverses raisons(Droit d'auteur,Recrutement du personnel), Système technologique de l'entreprise c# C'est parti. java,Il m'a fallu environ deux semaines pour le fairejava,Découvertejava La syntaxe de ,Je sais ce que ça veut dire en regardant le Code.Apprendrejav ...

Recommandation aléatoire

  1. Step by Step Installation BizTalk Server 2009

    Adresse originale :http://www.cnblogs.com/jfzhu/p/4020444.html Veuillez indiquer la source de la réimpression. L'environnement de démonstration est Windows Server 2008 Enterprise, SQL Se ...

  2. 【poj1739】 Tony&#39;s Tour

    http://poj.org/problem?id=1739 (Liens vers les sujets) Titre Donner unn*mCarte de, Certains sont des obstacles .Demandez le nombre d'options de chemin qui parcourent toutes les grilles non obstructives du coin inférieur gauche une seule fois et qui finissent par atteindre le coin inférieur droit. Solutio ...

  3. .NET Core、DNX、DNU、DNVM、MVC6Matériel d'apprentissage

    Un..Ressources 1.http://dotnet.github.io/ 2.http://www.codeproject.com/Articles/1005145/DNVM-DNX-and-DNU-Under ...

  4. SQLRésumé des connaissances de base(Un.)

    1.union Etunion all Opérateur 1)unionÀ l'intérieurselect L'instruction doit avoir la même colonne ,Les colonnes doivent également avoir un type numérique similaire.En même temps,Par articleselect Les colonnes de l'instruction sont dans le même ordre . unionSyntaxe( Ensemble de résultats non dupliqué ) ...

  5. iOSNotes d'étude---Demande de réseau

    Un..HTTP La notion d'accord HTTPAccord:Hyper Text Transfer Protocol(Protocole de transfert hypertexte)Est le Protocole de transport utilisé pour transférer l'hypertexte du serveur Web au navigateur local.HTTP Est un Protocole de couche d'application , Par demande et ...

  6. Le programmeur vous emmène 10 jours de démarrage rapidePython, Développement de logiciels informatiques (Trois)

    Déclaration:.Ce tutoriel s'adresse principalement aux programmeurs qui ont appris un langage de programmation. Pour apprendre une deuxième langue .Il y a des rêves, Tu es déterminé à être le lion de la ville. . Si c'est Xiaobai, , Vous pouvez également apprendre ce tutoriel . Mais ça peut être difficile. .Si vous avez des questions à discuter ci - dessous. Ou ajouter QQGroupe5 ...

  7. Meta Zone de visualisation des éléments

    Un.. Téléphone Web wap2.0 Page Web head Ajouter la métabalise suivante ,IniPhoneLes pages du Navigateur pour seront affichées en taille originale, Échelle non autorisée . <meta name="viewport" cont ...

  8. Configurationubuntu

    2. Installer le logiciel de configuration Après la création réussie du serveur , Cliquez sur la page de liste du serveur UbuntuBouton de connexion à distance pour la carte serveur d'application légère Démarrer l'installation du logiciel après une connexion réussie. VNCInstallation et configuration de Saisissez avant l'installation apt-get update Obtenir le plus ...

  9. C-LodopConseils“ La page n'est pas encore téléchargée , Attendez une minute. .”

    L'indice est affiché dans Lodop Dans les anciennes versions : Conseils"WebSocket Pas prêt. , OK, continuez. ",Conseils“C-Lodop Pas prêt. ”,La nouvelle version modifie la description de l'invite“ La page n'est pas encore téléchargée , Attendez une minute. .”,Jean ...

  10. navicat oracle library is not loaded

        navicat oracle library is not loaded CreationTime--2018Année8Mois9Jour19Point13Points Author:Marydon 1. Présentation de scénarios Navicat ...