La position actuelle:Accueil du site>JVM initial
JVM initial
2022-07-24 02:49:35【Bo0o2】
JavaUne caractéristique très importante de la langue est l'indépendance de la plateforme.Et utiliserJavaMachine virtuelle(JVM)Est la clé de la réalisation de cette caractéristique.JVMEst une spécification pour l'équipement informatique,C'est un ordinateur fictif.,Il est réalisé en simulant diverses fonctions informatiques sur un ordinateur réel..Il y avait trois grands types deJVM,
SunDe l'entrepriseHotSpot
BEADe l'entrepriseJRockit
IBMDe l'entrepriseJ9 JVM
Et puisSunEntreprises etBEALes entreprises sont toutesoracleAcquisitions,EtoracleAdoptionSunDe l'entrepriseHotSpotEtBEADe l'entrepriseJRockitDeux.JVML'essence moyenne s'est retirée. jdk1.8 DeJVM.
La figure ci - dessous montreJVMStructure de,Très important.,Surtout la zone d'exécution.
Zone de données d'exécution
1、Pile
JVMLe plus gros,Utilisé principalement pour stocker des instances d'objets et des tableaux,Presque toutes les instances d'objets allouent la mémoire ici.Partage de threads,Plusieurs tampons d'allocation privés thread sont divisés en interne(TLAB).Peut être situé dans un espace physiquement discontinu,Mais logiquement, c'est continu.
2、Pile de machines virtuelles
Chaque méthode est exécutée en créant un cadre de pile en même temps(Stack Frame)Utilisé pour stocker des tables de variables locales、Pile d'opération、Liens dynamiques、Exportation de la méthode et autres informations.Chaque méthode est appelée jusqu'à ce que le processus soit terminé,Correspond à un cadre de pile dans la pile de machines virtuelles de la pile à la pile.Thread Private,Le cycle de vie est compatible avec le thread.
3、Domaine méthodologique(Hors pile)
Appartient à la zone mémoire partagée,Stocke les informations de classe qui ont été chargées par la machine virtuelle、Constante、Variables statiques、Données telles que le Code compilé par le compilateur instantané.
4、Pile de méthodes locales
Pile de méthodes locales(Native MethodStacks)Le rôle de la pile de machines virtuelles est très similaire,La différence est que la pile de machines virtuelles exécute pour les machines virtuellesJava Méthodes(C'est le code byte.)Services,La pile de méthodes locales est utilisée pour les machines virtuellesNative Services méthodologiques.
5、Compteur de programmes
Compteur de programmes(Program CounterRegister)Est un petit espace mémoire,Son rôle peut être considéré comme un indicateur de numéro de ligne du code byte exécuté par le thread courant.Cette zone mémoire est la seule àJava Rien n'est spécifié dans la spécification de la machine virtuelle OutOfMemoryError Zone de situation.
6、Mémoire directe
Mémoire directe(Direct Memory)Ne fait pas partie de la zone de données d'exécution de la machine virtuelle,Pas du tout.JavaZone de mémoire définie dans la spécification de la machine virtuelle,Mais cette partie de la mémoire est également utilisée fréquemment,Et peut aussi causerOutOfMemoryError Anomalie.InJDK 1.4 Chine - SingapourNIO(New Input/Output)Catégorie,Introduit un canal basé sur(Channel)Et tampons(Buffer)DeI/OComment,Il peut être utiliséNativeLa Bibliothèque de fonctions alloue directement la mémoire hors tas,Et ensuite par un stockage dansJavaÀ l'intérieur de la pileDirectByteBuffer L'objet fonctionne comme une référence à cette mémoire.Cela améliore considérablement les performances dans certains scénarios,Parce qu'il a été évité dansJava Pile etNative Copier les données d'avant en arrière dans le tas.
Collection générationnelle de tas
JVM Il existe plusieurs algorithmes de collecte des ordures , Le plus classique d'entre eux est l'algorithme de collecte par génération , La priorité ici est de noter .
Génération permanente(Perm):Conservation primaireclass,method,fieldIsoobjet, La taille de l'espace , Selon le nombre de classes de chargement de démarrage du système , En général, le débordement de mémoire dans cette zone est un débordement au démarrage .java.lang.OutOfMemoryError: PermGen space
Vieux temps(Old): En général, les déchets sont recyclés plusieurs fois (GC) Objets non recyclés .
Cénozoïque(Eden):Objets nouvellement créés.
Cénozoïque(Survivor0):Après la collecte des ordures(GC)Après, Objets non recyclés .
Cénozoïque(Survivor1):Même chose.Survivor0Même chose.,Même taille d'espace,En même tempsSurvivor0EtSurvivor1Un seul est en service,Un est vide.
JavaLe tas est la principale zone de gestion des collecteurs d'ordures, Selon l'algorithme de collecte par génération , L'espace mémoire en tas peut continuer à être subdivisé en jeunes générations ,Vieux temps. Les jeunes générations peuvent à leur tour être divisées en EdenZone, Deux de taille égale From Survivor,To SurvivorZone.Par défautEdenRégions etSurvivor L'échelle de taille de la zone est 8:1:1. Lors de l'attribution de la mémoire à un objet nouvellement créé, assignez d'abord l'objet à EdenRégions etFrom SurvivorZone, Lors du recyclage immédiat ,Oui.EdenRégions etSurvivor Les objets vivants de la zone sont copiés à To SurvivorDans la zone,SiTo Survivor La taille de la zone ne peut pas contenir d'objets vivants , Les objets vivants seront affectés à la zone des personnes âgées .Dans l'ensemble, Les petits objets nouvellement créés seront placés dans la jeune génération , La plupart des objets de la jeune génération sont recyclés lors de la prochaine collecte des ordures , Les aînés stockent les objets de grande taille et les objets de longue durée .
Annexe:Concepts connexes
1、Types de base et de référence
JVMMoyenne,Les types de données peuvent être divisés en deux catégories::Types de base et de référence.Les variables du type de base enregistrent les valeurs originales,C'est - à - dire:: La valeur qu'il représente est la valeur elle - même ;Et la variable du type de référence stocke la valeur de référence.“Valeur de référence”Une référence représentant un objet,Pas l'objet lui - même.,L'objet lui - même est stocké à l'adresse indiquée par cette valeur de référence.
2、Pile et pile
Stack est l'unit é d'exécution,Et le tas est l'unit é de stockage.InJavaUn thread correspond à une pile de threads,C'est facile à comprendre,Parce que la logique d'exécution des différents Threads est différente,Une pile de Threads séparée est donc nécessaire.Et heap est partagé par tous les Threads.Pile parce que c'est une unit é d'exécution, Donc les informations stockées à l'intérieur sont liées au fil courant (Ou procédure)Informations pertinentes.Y compris les variables locales、État de fonctionnement du programme、Valeur de retour de la méthode, etc; Et le tas ne stocke que les informations de l'objet .
La pile représente la logique de traitement,Et le tas représente les données.
Il y a des objets dans le tas,La pile contient les types de données de base et les références d'objets dans le tas.
InJavaMoyenne,MainLa fonction est le point de départ de la pile,C'est aussi le point de départ du programme.
3、Type de référence
Les types de référence d'objet sont divisés en :Forte citation、Référence souple、Références faibles et virtuelles.
Forte citation:Ne sera pas recyclé. Est la référence générée par la machine virtuelle lorsque nous déclarons généralement que l'objet est , Dans un environnement fortement référencé , Lors de la collecte des ordures, il faut déterminer si l'objet courant est fortement référencé , Si elle est fortement citée ,Ne sera pas recyclé.
Référence souple:Assez de mémoire, Ne pas recycler ; Pas assez recyclé . Les références douces sont généralement utilisées comme cache pour . La différence avec les citations fortes est , Soft Reference in Waste Recycling , Les possibilités virtuelles déterminent si les références douces doivent être récupérées en fonction de la mémoire restante du système actuel . Si la mémoire restante est assez serrée , L'opportunité virtuelle récupère l'espace référencé par la référence douce ; Si la mémoire restante est relativement riche , Il n'y aura pas de recyclage .En d'autres termes,, La machine virtuelle se produit OutOfMemoryHeure, Il n'y a certainement pas de référence souple .
Faible référence:Sera recyclé. Les références faibles sont similaires aux références douces , Utilisé comme cache . Mais contrairement aux citations douces , Faible référence lors de la collecte des ordures , Ça doit être recyclé , Son cycle de vie n'existe donc que dans un seul cycle de collecte des ordures .
Mentions de copyright
Auteur de cet article [Bo0o2],Réimpression s’il vous plaît apporter le lien vers l’original, merci
https://fra.chowdera.com/2022/205/202207240249119840.html
Recommandé par sidebar
- [Python flask note 5] Blueprint simple à utiliser
- Composants web - cycle de vie des éléments personnalisés
- Entrepôt de données 4.0 Notes - acquisition de données commerciales
- Entrepôt de données 4.0 Notes - acquisition de données sur le comportement de l'utilisateur II
- Affichage itératif des fichiers.h5, opérations de données h5py
- Résumé des connaissances mathématiques communes
- Comment se développe le serveur GPU refroidi à l'eau dans le Centre de données dans le cadre de l'informatique est - Ouest?
- Connaissance du matériel 1 - schéma et type d'interface (basé sur le tutoriel vidéo complet de l'exploitation du matériel de baiman)
- Examen des principes fondamentaux de la structure en acier
- Unity3d: ugui source, Rebuild Optimization
Devinez que vous aimez
Solution rapide: xshell ne peut pas glisser dans un dossier ou un paquet
Rhcsa - - parcourir le contenu du fichier, couper, uniq, trier, utiliser les commandes.tr
Intégrité du signal (si) intégrité de l'alimentation électrique (PI) notes d'apprentissage (32) Réseau de distribution d'énergie (4)
Quelle est la raison pour laquelle la plate - forme easygbs ne peut pas lire l'enregistrement vidéo et a un phénomène de streaming répété rtmp?
Notes du jour 7
【 Visual Dispatching Software】 Shanghai Dow Ning apporte netronic download, Trial, tutoriel pour l'Organisation SMB
2. Les règles quantitatives
Événements courants de la souris et du clavier
C #: in, out, ref Keywords
Connaissance détaillée du GRE, du mgre; Connaissance de la configuration de base de l'OSPF
Recommandé au hasard
- Comment creo 9.0 modifie - t - il rapidement le système de coordonnées Cao?
- Notes du jour 5
- Renforcement de l'apprentissage - points de compréhension du gradient stratégique
- Le shell a besoin de connaître les commandes
- Okrk3399 Development Board Reserved i2c4 Mounting EEPROM
- Optimisation du serveur Cloud Huawei avec connexion clé
- Chapitre 2 requête de base et tri
- 【 langage c】 devinez jeux numériques + applet d'arrêt
- Qu'est - ce que le codage par titre?
- Feignclient utilise un tutoriel détaillé (illustration)
- Kettle implémente une connexion de base de données partagée et insère une instance de composant de mise à jour
- Simulation de modulation et de démodulation du signal CBOC basée sur MATLAB, sortie de corrélation, spectre de puissance et suivi de décalage de fréquence
- Les raccourcis clavier liés à l'onglet ne peuvent pas être utilisés après la mise à jour du vscode
- Expression du suffixe (une question par jour pendant les vacances d'été 4)
- Idées de conception sur l'initialisation des paramètres d'entrée de page
- Éléments de base de la validation des haricots - 04
- Une solution complète au problème du sac à dos dans la programmation dynamique
- Récursion des bosses 1: formule récursive
- Explication détaillée de l'injection aveugle d'erreur SQL
- Données chronologiques dans l'Internet industriel des objets
- Une erreur s'est produite lors de la configuration du login du moteur Gom: aucun correctif requis n'a été trouvé!
- [215] Gin Framework connection to MySQL Database
- Explication détaillée du principe de co - intégration en go
- [jzoof] 13 plage de mouvement du robot
- PCL: ajustement multiligne (RANSAC)
- 1259. Programmation dynamique de poignée de main disjointe
- Conception de l'interface UART basée sur la FPGA
- Elk note 25 - expérience rapide APM
- Analyse de l'industrie | interphone logistique
- Principe de l'énergie et méthode variationnelle note 19: principe de l'énergie résiduelle minimale + principe du travail possible
- Atelier macoll - notes de développement de la secte de l'ours 2
- Comment présenter votre expérience de projet lors d'une entrevue
- Scala Programming (Junior)
- Synchro esp32c3 Hardware Configuration Information serial port Print Output
- Serveur de chat de Cluster: conception de la table de base de données
- Apprentissage Lambda (utilisation du comparateur après tri, regroupement après collecte avec collectors.groupingby)
- Comment forcer complètement le meurtre de processus indépendants de l'arrière - plan?
- Programmation JDBC pour MySQL
- Utilisation des fonctions fléchées es6
- Lu Xia action | Source Kai Digital: Existing Mode or open source innovation?