Table des matières
初始化" >初始化
Maison Java JavaQuestions d'entretien Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

Aug 23, 2023 pm 03:05 PM
Questions d'interview Java

Loading

Lorsque nous voulons utiliser une classe, nous devons la charger en mémoire via ClassLoader

"La phase de chargement de la classe complète principalement les trois choses suivantes"

  1. Obtenez le flux binaire de la classe via le nom complet de la classe
  2. Analysez le flux binaire de la classe dans la structure de données dans la zone des méthodes
  3. Créez une instance de la classe java.lang.Class à représenter le type, comme zone de méthode cette entrée d'accès à la classe
Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

"Il existe de nombreuses façons d'obtenir le flux binaire d'une classe via le nom complet de la classe"

  1. Obtenez-le à partir du package zip
    "Récupérez-le depuis le réseau" dans le chargeur de classe de la machine virtuelle Java pour terminer, ou vous pouvez utiliser le chargeur de classe personnalisé pour terminer"
  2. Lien

    "Cette étape de liaison est principalement divisée en 3 parties, vérification, préparation et analyse"

    Vérification

    " L'étape de vérification est principalement pour garantir que Classe Le format du fichier est correct et ne mettra pas en danger la sécurité de la machine virtuelle lors de son exécution."

    Il existe de nombreuses règles dans la phase de vérification, mais elles sont grossièrement divisées en quatre étapesIntervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes) "Je n'expliquerai pas les détails spécifiques en détail, vous pouvez voir" "Compréhension approfondie de la machine virtuelle Java", cet article préfère faire un résumé et saisir le processus global de chargement des classes sans élaborer sur les détails. pour les variables statiques de la classe et initialisez-les aux valeurs par défaut"

    Les valeurs par défaut des types de données courants sont les suivantes
    Type de données Valeur par défaut
    byte (byte)0
    short (short)0
    int 0
    long 0L
    float 0.0f
    double 0.0d
    boolean false
    char 'u0000'
    référence null

    "Si l'attribut ConstantValue existe dans la table attributaire de champ de la variable statique de classe, l'instruction d'affectation sera exécutée directement"

    Alors dans quelles circonstances l'attribut ConstantValue existe-t-il dans la table attributaire de champ de la variable statique de classe ?

    1. Les variables statiques de classe sont des types de données de base et sont modifiées par final
    2. Les variables statiques de classe sont de type String, sont modifiées par final et se voient attribuer des valeurs sous forme de littéraux

    Dans l'ordre pour faciliter la visualisation des octets du code du fichier Class, j'ai téléchargé un plug-in jclasslib Bytecode viewer dans IDEA, ce qui est très pratique. Utilisez le code suivant pour le vérifier sous forme de bytecode

    public class Person {
    
        private static int age = 10;
        private static final int length = 160;
        private static final String name = "name";
        private static final String loc = new String("loc");
    }

    Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)"Ainsi, les attributs de longueur et de nom se verront attribuer les valeurs spécifiées par ConstantValue lors de la phase de préparation"

    "Puis à quelle étape le les attributs age et loc doivent-ils être attribués ? classes, interfaces, champs et méthodes en références directes 》Référence symbolique : utilisez un ensemble de symboles pour décrire la cible référencée Référence directe ; pointeur direct vers la cibleIntervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

    Rejoignez-moi et écrivez une classe comme suit

    public class Student {
    
        private String name;
        private int age;
    
        public String getName() {
            return this.name;
        }
    }
    En prenant les champs comme exemple, les objets correspondant au nom et à l'âge ne pointent pas directement vers l'adresse mémoire, mais sont décrits avec des chaînes ( c'est-à-dire référence symbolique). L'étape d'analyse consiste à convertir ces descriptions en pointeurs pointant directement vers la cible (c'est-à-dire des références directes)

    初始化

    「执行类静态成员变量赋值语句和静态代码块中的语句」

    Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

    我们把上面的Student代码改成如下形式

    public class Student {
    
        private String name;
        private int age = 10;
        private static int gender = 1;
    
        {
            System.out.println("构造代码块");
        }
    
        static {
            System.out.println("静态代码块");
        }
    
        public Student() {
            System.out.println("构造函数");
        }
    
        public String getName() {
            return this.name;
        }
    }

    可以看到字节码中包含了3个方法,getName方法我们知道,方法里面执行了哪些逻辑?Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)从字节码的角度分析一波

    方法」

    Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

    从字节码可以看到方法的主要逻辑为

    1. 调用父类的方法
    2. 非静态成员变量赋值
    3. 执行构造代码块
    4. 执行构造函数

    Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)方法」Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)从字节码可以看到方法的主要逻辑为

    1. Exécutez l'instruction d'affectation de la variable statique
    2. Exécutez l'instruction dans le bloc de code statique
    3. Une chose à noter est que "La machine virtuelle Java garantit cela avant la méthode de la sous-classe est exécuté, la méthode de la classe parent a été exécutée"

    "Il est encore nécessaire de comprendre le rôle des méthodes et à propos des blocs de code statiques, des blocs de code construits et de l'ordre d'exécution des fonctions construits "

    Je vais résumer la conclusion directement ici. Vous pouvez écrire une démo pour la vérifier

    "Ordre d'exécution sans héritage"

    1. Blocs de code statiques et variables membres statiques, l'ordre d'exécution est donné par L'ordre d'écriture est déterminé (il ne sera exécuté qu'une seule fois)
    2. Construisez des blocs de code et des variables membres non statiques, l'ordre d'exécution est déterminé par l'écriture order
    3. Constructor

    "Ordre d'exécution avec héritage"

    1. Statique (bloc de code statique, variables membres statiques) de la classe parent, statique (bloc de code statique, variables membres statiques) de la sous-classe (ne sera exécuté qu'une seule fois)
    2. Non-statique (bloc de code construit) de la classe parent, variables membres non statiques), le constructeur de la classe parent
    3. le non-statique (bloc de code de construction, variables membres non statiques) de la sous-classe, le constructeur de la sous-classe

    Unloading

    Le garbage collection se produit non seulement dans le tas, mais également dans la zone des méthodes. Cependant, les conditions de recyclage des données de type dans la zone méthode sont assez strictesIntervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)La figure suivante est un exemple Je souhaite recycler la classe Simple dans la zone méthode

    .
    1. Vous devez vous assurer que la classe Sample et ses sous-classes dans le tas ont été recyclées
    2. Le MyClassLoader qui charge la classe Sample a été recyclé
    3. L'objet Class correspondant à la classe Sample a été recycléIntervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

    Vous pouvez voir Les conditions de recyclage des données de type dans la zone de méthode sont relativement dures, mais les résultats sont minimes, donc certains éboueurs ne recycleront pas les données de type dans la zone de méthode

    Résumé

    Processus de chargement des classesIntervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

    Processus d'affectation des variablesIntervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes)

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

Sujets chauds

Tutoriel PHP
1545
276
Intervieweur : annotations communes et séquence d'exécution de Spring Aop Intervieweur : annotations communes et séquence d'exécution de Spring Aop Aug 15, 2023 pm 04:32 PM

Vous devez connaître Spring, alors parlons de l'ordre de toutes les notifications d'Aop. Comment Spring Boot ou Spring Boot 2 affecte-t-il l'ordre d'exécution d'aop ? Parlez-nous des pièges que vous avez rencontrés en AOP ?

Entretien avec un certain groupe : si vous rencontrez un MOO en ligne, comment devez-vous le résoudre ? Comment le résoudre ? Quelles options ? Entretien avec un certain groupe : si vous rencontrez un MOO en ligne, comment devez-vous le résoudre ? Comment le résoudre ? Quelles options ? Aug 23, 2023 pm 02:34 PM

MOO signifie qu'il existe une vulnérabilité dans le programme, qui peut être causée par la configuration du code ou des paramètres JVM. Cet article explique aux lecteurs comment dépanner lorsqu'un processus Java déclenche le MOO.

La semaine dernière, j'ai eu un entretien avec XX Insurance et c'était cool ! ! ! La semaine dernière, j'ai eu un entretien avec XX Insurance et c'était cool ! ! ! Aug 25, 2023 pm 03:44 PM

La semaine dernière, un ami du groupe est allé passer un entretien avec Ping An Insurance. Le résultat a été un peu regrettable, ce qui est bien dommage, mais j'espère que vous ne vous découragerez pas, comme vous l'avez dit, essentiellement toutes les questions rencontrées. l'entretien peut être résolu en mémorisant les questions de l'entretien. C'est résolu, alors s'il vous plaît, travaillez dur !

Les questions du test écrit d'Ele.me semblent simples, mais elles déconcertent beaucoup de gens Les questions du test écrit d'Ele.me semblent simples, mais elles déconcertent beaucoup de gens Aug 24, 2023 pm 03:29 PM

Ne sous-estimez pas les questions d’examen écrit de nombreuses entreprises. Il existe des pièges et vous pouvez y tomber accidentellement. Lorsque vous rencontrez ce genre de question de test écrit sur les cycles, je vous suggère de réfléchir calmement et de procéder étape par étape.

5 questions d'entretien à cordes, moins de 10 % des personnes peuvent toutes y répondre correctement ! (avec réponse) 5 questions d'entretien à cordes, moins de 10 % des personnes peuvent toutes y répondre correctement ! (avec réponse) Aug 23, 2023 pm 02:49 PM

​Cet article examinera 5 questions d'entretien sur la classe Java String. J'ai personnellement rencontré plusieurs de ces cinq questions au cours du processus d'entretien. Cet article vous aidera à comprendre pourquoi les réponses à ces questions sont ainsi.

Il est recommandé de collecter 100 questions d'entretien Linux avec réponses Il est recommandé de collecter 100 questions d'entretien Linux avec réponses Aug 23, 2023 pm 02:37 PM

Cet article compte au total plus de 30 000 mots, couvrant la présentation de Linux, le disque, le répertoire, le fichier, la sécurité, le niveau de syntaxe, le combat pratique, les commandes de gestion de fichiers, les commandes d'édition de documents, les commandes de gestion de disque, les commandes de communication réseau, les commandes de gestion du système, la sauvegarde. commandes de compression, etc. Démantèlement des points de connaissances Linux.

Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS Les novices peuvent également rivaliser avec les enquêteurs BAT : CAS Aug 24, 2023 pm 03:09 PM

Le chapitre supplémentaire de la série de programmation simultanée Java, C A S (Comparer et échanger), est toujours dans un style facile à comprendre avec des images et des textes, permettant aux lecteurs d'avoir une conversation folle avec l'intervieweur.

Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes) Intervieweur : Parlez-moi du processus de chargement des classes (10 diagrammes) Aug 23, 2023 pm 03:05 PM

Lorsque nous voulons utiliser une classe, nous devons la charger en mémoire via ClassLoader.

See all articles