当前位置:网站首页>L'intervieweur demande toujours le mode adaptateur et le mode d'apparence.

L'intervieweur demande toujours le mode adaptateur et le mode d'apparence.

2021-09-15 03:59:23 Programmeur Ifni

Un.、Dans quelles circonstances un débordement de mémoire de pile peut - il se produire?

1、La pile est privée au fil, La pile a le même cycle de vie que le fil , Chaque méthode crée un cadre de pile au moment de l'exécution , Il contient des tableaux de variables locales 、Pile d'opérandes、Liens dynamiques、Exportation de la méthode et autres informations, Le tableau des variables locales comprend à son tour les types de données de base et les références aux objets ;
2、 Lorsque la profondeur de la pile demandée par le thread dépasse la profondeur maximale autorisée par la machine virtuelle ,Va lancerStackOverFlowErrorAnomalie, Ce problème peut survenir avec l'invocation récursive de la méthode Ken ;

3、Ajuster les paramètres-xss Pour ajuster jvmLa taille de la pile

2.、DétailsJVMModèle de mémoire?

Longue écriture de dix mille caractères, L'intervieweur demande toujours le mode adaptateur et le mode apparence ,_Java

jvm Diviser la machine virtuelle en 5 Grande région ,Compteur de programmes、Pile de machines virtuelles、Pile de méthodes locales、javaPile、Domaine méthodologique;

  • Compteur de programmes:Thread Private,C'est un petit espace mémoire, Indicateur de numéro de ligne pour le fil courant , L'adresse de l'instruction thread utilisée pour enregistrer l'exécution de la machine virtuelle actuelle ;
  • Pile de machines virtuelles:Thread Private, Chaque méthode crée un cadre de pile lorsqu'elle est exécutée ,Utilisé pour stocker des tables de variables locales、Opérande、 Liens dynamiques et retour de méthode, etc , Lorsque la profondeur de la pile demandée par le thread dépasse la profondeur maximale autorisée par la machine virtuelle ,Et ça va sortir.StackOverFlowError;
  • Pile de méthodes locales:Thread Private,Ce qui est sauvegardénativeInformations sur la méthode,Quand unjvm Appel thread créé nativeAprès la méthode,jvm Aucun cadre de pile n'est créé pour ce thread dans la pile de machines virtuelles , Il s'agit plutôt d'un simple lien dynamique et d'un appel direct à la méthode ;
  • Pile:java Heap est une mémoire partagée par tous les Threads , Presque toutes les instances et tableaux d'objets doivent allouer de la mémoire sur le tas , Par conséquent, les opérations de recyclage des déchets se produisent fréquemment dans cette zone ;
  • Domaine méthodologique: Stocke les informations de classe chargées 、Constante、Variables statiques、 Données de code compilées par le compilateur instantané . C'est - à - dire l'agent permanent ,Injdk1.8 Il n'y a pas de zone de méthode dans , Remplacé par une zone de métadonnées , La zone de la méthode originale est divisée en deux parties ;1:Informations de classe chargées,2:Pool constant d'exécution; Les informations de classe chargées sont sauvegardées dans la zone de métadonnées , Le pool constant d'exécution est stocké dans le tas ;

Trois、JVMPour la première foisGCÀ quoi ça ressemble??Comment l'objet a - t - il été promu à l'âge?

Longue écriture de dix mille caractères, L'intervieweur demande toujours le mode adaptateur et le mode apparence ,_Arrière - plan_02

javaPile = Cénozoïque+Vieux temps;Cénozoïque = Eden + Suivivor(S0 + S1), L'échelle d'allocation par défaut est 8:1:1;QuandEden Quand la zone est pleine ,Ça se déclenche une fois.Minor GC,Pour ramasser les ordures de la nouvelle génération, Les objets survivants seront affectés à Survivor Grand objet (Objets nécessitant une grande quantité de mémoire continue) Sera attribué directement à l'ancien âge si l'objet est Eden Né en milieu de vie , Et après une expérience Minor GC Toujours en vie après , S'ils sont affectés à la zone de survie ,Âge+1, Chaque fois depuis Minor GC Et survivre ,Juste l'âge.+1, Quand l'âge atteint 15Quand, Sera promu à l'âge ;Quand la vieillesse sera complète, Et s'il n'y a plus d'objets ,Déclenchera une foisfull gc;full gc Tout le tas de mémoire est stocké (Y compris les jeunes et les personnes âgées);;Major GC C'est arrivé dans les temps anciens GC,Nettoyer la zone gériatrique,Souvent accompagné au moins une foisminor gc;

Quatre、JavaAlgorithme de collecte des ordures dans?

java Il existe quatre algorithmes de collecte des ordures , Ce sont les méthodes d'effacement des marques 、Finition des étiquettes、Algorithme de réplication、Algorithme de collecte par génération;

  • Méthode de nettoyage des étiquettes:Première étape: Utiliser l'accessibilité pour traverser la mémoire , Marquer les objets vivants et les objets poubelles ;Deuxième étape: En traversant , Recycler tous les objets marqués ;Caractéristiques: Pas efficace ,Le marquage et le nettoyage ne sont pas efficaces; Le marquage et l'enlèvement produisent un grand nombre de fragments d'espace discontinus , Cela peut entraîner l'attribution d'objets plus grands au fur et à mesure que le programme s'exécute et qu'aucun fragment consécutif n'est trouvé et qu'il doit être déclenché une fois GC;
  • Finition des étiquettes:Première étape: Utiliser l'accessibilité pour traverser la mémoire , Marquer les objets vivants et les objets poubelles ;Deuxième étape: Déplacer tous les objets vivants vers un segment , Recycler tous les objets à l'extérieur de la limite d'extrémité ;Caractéristiques: S'applique à plus d'objets vivants , Moins de déchets ; Processus à organiser , Pas de création de débris spatiaux ;
  • Algorithme de réplication: Diviser la mémoire en deux morceaux de taille égale selon la taille de la capacité , Un seul morceau à la fois , Quand un morceau est utilisé , Déplacez l'objet vivant sur un autre morceau , Et après avoir retiré l'espace mémoire utilisé ;Caractéristiques:Pas de débris spatiaux; Très faible utilisation de la mémoire ;
  • Algorithme de collecte par génération: Selon le cycle de vie de l'objet mémoire , Diviser la mémoire en morceaux ,java Les machines virtuelles divisent généralement la mémoire en cénozoïques et en cénozoïques ,Dans le cénozoïque, Un grand nombre d'objets meurent et un petit nombre survivent , Donc en utilisant l'algorithme de réplication ,La collecte peut être effectuée à un coût minime de reproduction d'objets vivants; Les personnes âgées ont un taux de survie très élevé , Il n'y a pas d'espace supplémentaire pour le garantir , Donc, utilisez l'algorithme de nettoyage des étiquettes ou de tri des étiquettes pour récupérer ;

Cinq、Comment déterminer si un objet a survécu?

Déterminer si un objet a survécu , Divisé en deux algorithmes 1:Compteur de référence;2:Algorithme d'analyse de l'accessibilité;

Compteur de référence: Définir un compteur de référence pour chaque objet , Quand il y a un endroit où se référer à l'objet , Le compteur de référence est juste +1, Lorsque la référence est invalide , Le compteur de référence est juste -1; Lorsque le compteur de référence est 0Quand, Ça veut dire que cet objet n'est pas référencé ,C'est l'objet pourri,En attente de recyclage;Inconvénients:Impossible de résoudre le problème de la référence circulaire,QuandARéférencesB,B Aussi cité AQuand,En ce momentAB Aucune référence à l'objet n'est 0, Il n'y a pas de collecte des ordures pour le moment , Donc, en général, les machines virtuelles grand public n'utilisent pas cette méthode ;

La méthode d'analyse de l'accessibilité est dérivée d'une méthode appelée GC Roots Recherche d'objets pour ,Si un objetGC Roots Quand aucune chaîne de référence n'est connectée , Description cet objet n'est pas disponible ,Injava Peut être utilisé comme GC Roots Les objets de :

La pile de méthodes locales de l'objet référencé par le pool de constantes de zone de la variable référencée par l'attribut statique de la classe de zone de méthode de l'objet référencé dans la pile de machines virtuelles JNI Objet référencé, mais lorsqu'un objet satisfait aux conditions ci - dessus , Pas immédiatement recyclé , Deux autres marques sont nécessaires ; Première marque : Déterminer si l'objet courant a finalize() Méthode et la méthode n'a pas été exécutée , S'il n'existe pas, il est marqué comme un objet poubelle ,En attente de recyclage; S'il y en a , Puis un deuxième marquage ; La Deuxième étiquette place l'objet courant dans F-QueueFile d'attente,Et génère unfinalize Thread to perform the Method , La machine virtuelle ne garantit pas que la méthode sera exécutée , C'est parce que si le thread s'exécute lentement ou entre dans une impasse , Peut causer un crash du système de recyclage ;Si elle est exécutéefinalize La méthode n'a toujours pas été utilisée avec GC Roots Il y a des références directes ou indirectes , L'objet sera recyclé ;

Enfin

Pour beaucoup deJavaPour les ingénieurs,Je veux améliorer mes compétences,C'est souvent moi qui tâte de grandir,L'apprentissage fragmenté est inefficace, long et impuissant.

J'espère que ces données sont correctesJavaLes Amis du développement ont des références et moins de détours,Le but de cet article est de savoir si vous avez récolté et grandi,Le reste n'a pas d'importance,J'espère que les lecteurs s'en souviendront.

Partager une autre vague de mesJavaQuestions d'entrevue+Détails de l'apprentissage vidéo+Livres de compétences avancées

 CodeChinaProjet Open Source:【Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Résumé de base notes d'étude+Dernière vidéo d'explication】

Longue écriture de dix mille caractères, L'intervieweur demande toujours le mode adaptateur et le mode apparence ,_Arrière - plan_03

版权声明
本文为[Programmeur Ifni]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/09/20210915035446326s.html

随机推荐