Table des matières
1.2 运行时常量池
2 字符串池
Cependant, contrairement au pool de chaînes, ces pools Wrapper ne grandiront pas comme le pool de chaînes, c'est-à-dire que le nombre d'objets dans le pool est fixe et il n'y aura que -128~127 dans le pool Integer.
Maison Java javaDidacticiel Analyse approfondie de la compréhension et du rôle du pool de constantes de chaîne et du pool de tampons en JAVA

Analyse approfondie de la compréhension et du rôle du pool de constantes de chaîne et du pool de tampons en JAVA

Mar 18, 2022 pm 05:24 PM
java

Cet article vous apporte des connaissances pertinentes sur java, qui présente principalement la compréhension et le rôle du pool de constantes de chaînes et du pool de tampons sont deux choses complètement différentes, mais dans de nombreux endroits, ils aiment tous les confondre. peuvent facilement provoquer des malentendus parmi les débutants. J'aimerais ici en discuter attentivement, dans l'espoir d'aider tout le monde.

Analyse approfondie de la compréhension et du rôle du pool de constantes de chaîne et du pool de tampons en JAVA

Étude recommandée : "Tutoriel d'apprentissage Java"

Le pool de cordes peut aussi être appelé Le pool constant de cordes Je pense que ce nom est la source d'un malentendu. Certaines personnes en parlent simplement. string sont omis, ne laissant que pool constant... Donc, afin d'éviter tout malentendu, je suggère que lorsque l'on fait référence au pool de cache d'objets chaîne, il suffit de l'appeler pool de chaînes 1 Pool

.

1.1 Pool de constantes statiques . Le pool de constantes dans le fichier .class peut être considéré comme un tableau. Certaines constantes sont stockées dans le tableau. Lorsque cette constante doit être utilisée dans les instructions de bytecode, l'index du tableau. est utilisé. Venez le visiter.

Regardez le code ci-dessous :

 String m = "hellohellohellohellohello";
 String n = "hellohellohellohellohello";
Copier après la connexion
Il sera sous la forme de ceci dans le bytecode :
 // 常量池:
 #1 hellohellohellohellohello
 #2 ...
 ...
 ----------------------------
 
 String m = #1;
 String n = #1;
Copier après la connexion

Bien sûr, ce n'est qu'une version simplifiée, elle est en fait plus compliquée (la version actuelle peut être trouvée dans le références à la fin de l'article Pour la réponse publiée dans la section, vous ne pouvez considérer que la version simplifiée pour l'instant)

Notez que la constante de chaîne stockée ici n'est qu'une simple séquence d'octets codée en UTF8, pas un objet chaîne Java . Tout comme la chaîne que vous stockez dans un texte txt, nous utilisons le format UTF8 pour ouvrir un fichier .class. Vous pouvez voir que hellohellohellohellohello peut être analysé :

1.2 Pool de constantes d'exécution

Compréhension Après avoir compris le pool constant statique, le pool constant d’exécution est facile à comprendre. En termes simples, le pool de constantes d'exécution est la représentation d'exécution du pool de constantes statiques dans le fichier .class de la JVM. Chaque pool de constantes statiques du fichier .class générera un pool de constantes d'exécution correspondant. Lorsque la JVM interprète l'instruction String m = #1, elle peut accéder au pool de constantes d'exécution de cette classe pour trouver la définition de #1.

hellohellohellohellohello是可以被解析的:

1.2 运行时常量池

理解了静态的常量池之后,运行时常量池就很容易想明白了。简单来说,运行时常量池就是.class文件中的静态常量池在JVM中的运行时表示,每一个.class文件的静态常量池都会生成一个对应的运行时常量池。等到JVM在解释String m = #1这条指令时,它可以去这个类的运行时常量池中查找#1的定义。

2 字符串池

字符串池是Java为了重用String对象而设置的一个缓存池,Java1.7之前设置在方法区上,保存的是String对象;Java1.7之后设置在堆上,保存的是String对象的引用,String对象本身存在于堆上的其他位置。下文中以Java1.7之后的情况为标准。

继续上面的例子。当JVM在解释String m = #1时,它已经从运行时常量池拿到了相应的UTF8序列,接下来,它会在字符串池中寻找和这个UTF8序列对应的String对象,并把这个对象的引用赋值给m。你可能会好奇这个String被创建的时机,根据R大的这篇文章,在这条语句所在的类被加载时,如果字符串池中已经存在对应的对象了,那么就什么都不做,如果不存在,就会创建一个对应的String对象,并把其引用放入池中。

除了字符串池,IntegerLong等Wrapper类型也有自己的缓存池,比如Integer会缓存从-128~127的Integer对象,当使用字面量赋值或者Integer.valueOf()2 String Pool

Le pool de chaînes est un pool de cache mis en place par Java pour réutiliser les objets String Avant Java1.7, il était défini dans la zone de méthode et enregistré les objets String Java1.7 ; Il est ensuite défini sur le tas et contient une référence à l'objet String lui-même existe ailleurs sur le tas. Ce qui suit prend la situation après Java 1.7 comme standard.

Continuez avec l'exemple ci-dessus. Lorsque la JVM interprète String m = #1, elle a obtenu la séquence UTF8 correspondante du pool de constantes d'exécution. Ensuite, elle recherchera l'objet String correspondant à cette séquence UTF8 dans le pool de chaînes et ajoutera la référence de l'objet. à m. Vous pourriez être curieux de connaître le moment où cette chaîne est créée. Selon cet article R, lorsque la classe où se trouve cette instruction est chargée, si l'objet correspondant existe déjà dans le pool de chaînes, alors rien ne sera fait. n'existe pas, un objet String correspondant sera créé et sa référence sera placée dans le pool.

En plus du pool de chaînes, les types Wrapper tels que Integer et Long ont également leurs propres pools de cache. Par exemple, Integer sera mis en cache. valeurs de -128~127 objet Integer, lors de l'utilisation d'une affectation littérale ou Integer.valueOf(), si l'objet correspondant existe dans le pool, l'objet dans le pool sera renvoyé uniquement lorsque le pool. De nouveaux objets seront créés sur le tas uniquement s'il n'y en a pas.

Cependant, contrairement au pool de chaînes, ces pools Wrapper ne grandiront pas comme le pool de chaînes, c'est-à-dire que le nombre d'objets dans le pool est fixe et il n'y aura que -128~127 dans le pool Integer.

Le pool de tampons correspondant au type de base est le suivant :

Parmi tous les pools de tampons numériques de jdk 1.8, le pool de tampons entiers IntegerCache est très spécial. La limite inférieure de ce pool de tampons est de - 128, et la limite supérieure. la limite est de 127 par défaut, mais cette limite supérieure est réglable. Lors du démarrage de jvm, spécifiez la taille de ce pool de tampons via -XX:AutoBoxCacheMax=. Cette option définira une propriété système nommée java.lang.IntegerCache.high lorsque. la JVM est initialisée, puis lorsque IntegerCache est initialisé, cette propriété système sera lue pour déterminer la limite supérieure.

🎜🎜🎜Apprentissage recommandé : "🎜Tutoriel Java🎜"🎜

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)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
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.

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

Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Feb 07, 2025 pm 12:11 PM

Spring Boot simplifie la création d'applications Java robustes, évolutives et prêtes à la production, révolutionnant le développement de Java. Son approche "Convention sur la configuration", inhérente à l'écosystème de ressort, minimise la configuration manuelle, allo

See all articles