Inhaltsverzeichnis
1 Konstantenpool
1.2 运行时常量池
2 字符串池
Heim Java javaLernprogramm Welche Rolle spielen der String-Konstantenpool und der Pufferpool in JAVA?

Welche Rolle spielen der String-Konstantenpool und der Pufferpool in JAVA?

May 18, 2023 pm 07:22 PM
java

Welche Rolle spielen der String-Konstantenpool und der Pufferpool in JAVA?


1 Konstantenpool

Der Konstantenpool ist in zwei Typen unterteilt, einer ist der statische Konstantenpool in der .class-Datei und der andere ist der statische Konstantenpool in der .class-Datei In die JVM geladen.

1.1 Statischer Konstantenpool

Der Konstantenpool in der .class-Datei kann als Array betrachtet werden. Wenn diese Konstante in Bytecode-Anweisungen verwendet werden muss Kommt vorbei und besichtigt es.

Schauen Sie sich den Code unten an:

 String m = "hellohellohellohellohello";
 String n = "hellohellohellohellohello";
Nach dem Login kopieren

Er wird in der folgenden Form im Bytecode vorliegen:

 // 常量池:
 #1 hellohellohellohellohello
 #2 ...
 ...
 ----------------------------
 
 String m = #1;
 String n = #1;
Nach dem Login kopieren

Natürlich ist dies nur eine vereinfachte Version, sie ist tatsächlich komplizierter (die tatsächliche Version finden Sie in der Verweise am Ende des Artikels Für die in diesem Abschnitt veröffentlichte Antwort können Sie vorerst nur die vereinfachte Version in Betracht ziehen)

Beachten Sie, dass die darin gespeicherte String-Konstante nur eine einfache UTF8-codierte Bytesequenz und kein Java-String-Objekt ist . Genau wie die Zeichenfolge, die Sie in einem TXT-Text speichern, verwenden wir das UTF8-Format, um eine .class-Datei zu öffnen. Sie können sehen, dass hellohellohello analysiert werden kann: Welche Rolle spielen String-Konstantenpool und Pufferpool in JAVA?“ /></p><p><code>hellohellohellohellohello</code>是可以被解析的:<img src=

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()1.2 Laufzeitkonstantenpool

Nach dem Verständnis der Statischer Konstantenpool, der Laufzeitkonstantenpool ist leicht zu verstehen. Einfach ausgedrückt ist der Laufzeitkonstantenpool die Laufzeitdarstellung des statischen Konstantenpools in der .class-Datei in der JVM. Jeder statische Konstantenpool in der .class-Datei generiert einen entsprechenden Laufzeitkonstantenpool. Wenn die JVM die Anweisung String m = #1 interpretiert, kann sie zum Laufzeitkonstantenpool dieser Klasse gehen, um die Definition von #1 zu finden.

2 String-Pool

Der String-Pool ist ein von Java eingerichteter Cache-Pool zur Wiederverwendung von String-Objekten. Vor Java1.7 wurde er im Methodenbereich festgelegt und String-Objekte gespeichert Es wird dann auf den Heap gesetzt und enthält einen Verweis auf das String-Objekt. Das String-Objekt selbst existiert an anderer Stelle auf dem Heap. Im Folgenden wird die Situation nach Java 1.7 als Standard verwendet. 🎜🎜Fahren Sie mit dem obigen Beispiel fort. Wenn die JVM String m = #1 interpretiert, hat sie die entsprechende UTF8-Sequenz aus dem Laufzeitkonstantenpool abgerufen. Als Nächstes sucht sie im String-Pool nach dem String-Objekt, das dieser UTF8-Sequenz entspricht, und fügt die Referenz des Objekts hinzu zugeordnet zu m. Sie sind möglicherweise neugierig auf den Zeitpunkt, zu dem dieser String erstellt wird. Wenn die Klasse, in der sich diese Anweisung befindet, geladen wird, wird nichts unternommen, wenn das entsprechende Objekt bereits im String-Pool vorhanden ist nicht existiert, wird ein entsprechendes String-Objekt erstellt und dessen Referenz im Pool platziert. 🎜🎜Zusätzlich zum String-Pool verfügen Wrapper-Typen wie Integer und Long auch über eigene Cache-Pools. Beispielsweise wird Integer zwischengespeichert Werte von -128~127 Integer Objekt, bei Verwendung von Literalzuweisung oder Integer.valueOf(), wenn das entsprechende Objekt im Pool vorhanden ist, das Objekt im Pool wird nur zurückgegeben, wenn der Pool neue Objekte nur dann auf dem Heap erstellt, wenn keine vorhanden sind. 🎜🎜Im Gegensatz zum String-Pool wachsen diese Wrapper-Pools jedoch nicht wie der String-Pool, d. h. die Anzahl der Objekte im Pool ist festgelegt, und im Integer-Pool sind nur -128 bis 127 vorhanden. 🎜🎜Der dem Grundtyp entsprechende Pufferpool lautet wie folgt: 🎜
boolean values true and false
 all byte values
 short values between -128 and 127
 int values between -128 and 127
 char in the range \u0000 to \u007F
Nach dem Login kopieren
🎜Unter allen numerischen Pufferpools in JDK 1.8 ist der Integer-Pufferpool IntegerCache etwas ganz Besonderes. Die Untergrenze dieses Pufferpools beträgt -128 und die Obergrenze Die Grenze beträgt standardmäßig 127, aber diese Obergrenze ist einstellbar. Geben Sie beim Starten des JVM die Größe dieses Pufferpools über -XX:AutoBoxCacheMax= an Die JVM wird initialisiert. Wenn IntegerCache initialisiert wird, wird diese Systemeigenschaft gelesen, um die Obergrenze zu bestimmen. 🎜

Das obige ist der detaillierte Inhalt vonWelche Rolle spielen der String-Konstantenpool und der Pufferpool in JAVA?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

See all articles